RSA Security 5 User manual

Category
Projection TVs
Type
User manual
RSA BSAFE
®
Crypto-C
Cryptographic Components for C
Library Reference Manual
Version 5.0
Copyright Notice
© 2000 RSA Security Inc. All rights reserved. This work contains proprietary
information of RSA Security Inc. Distribution is limited to authorized licensees of
RSA Security Inc. Any unauthorized reproduction or distribution of this document is
strictly prohibited.
ACE/Server, BSAFE, Genuine RSA Encryption Engine, RC2, RC4, RSA SecurPC,
SecurID, SoftID, and WebID are registered trademarks, and ACE/Agent,
ACE/Sentry, eSecurity, Genuine RSA encryption, Kane Security Analyst, Kane
Security Monitor, Keon, RC5, RC6, RSA, RSA Secured, SecurCare, and SecurSight are
trademarks of RSA Security Inc.
Other trademarks and trade names are the property of their respective owners.
The RSA™ Public Key Cryptosystem is protected by U.S. Patent #4,405,829.
The RC5™ Block Encryption Algorithm With Data-Dependent Rotations is protected
by U.S. Patent #5,724,428 and #5,835,600.
The DES implementation in this product contains code based on the “libdes” package
written by Eric A. Young (
[email protected]) and is included with his permission.
© 1994, 1996-2000 RSA SECURITY INC. 001-019002-500-001-000
iii
Contents
Chapter 1
Introduction 1
Organization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
The Crypto-C Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Memory Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Code Example. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
The Algorithm Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
The Key Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
The Algorithm Chooser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
The BDEMO Algorithm Chooser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Defining an Algorithm Chooser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
The Surrender Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Surrender . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
The ITEM Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Chapter 2
Algorithm Info Types 15
AI_BSSecretSharing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
AI_CBC_IV8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19
AI_CBC_IV16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
AI_DES_CBC_BSAFE1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21
AI_DES_CBC_IV8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23
AI_DES_CBCPadBER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
AI_DES_CBCPadIV8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
AI_DES_CBCPadPEM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
AI_DES_EDE3_CBC_IV8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
AI_DES_EDE3_CBCPadBER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
AI_DES_EDE3_CBCPadIV8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
AI_DESX_CBC_BSAFE1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37
AI_DESX_CBC_IV8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39
AI_DESX_CBCPadBER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41
AI_DESX_CBCPadIV8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
iv
RSA BSAFE Crypto-C Library Reference Manual
AI_DHKeyAgree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
AI_DHKeyAgreeBER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
AI_DHParamGen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
AI_DSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
AI_DSAKeyGen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
AI_DSAParamGen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
AI_DSAWithSHA1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
AI_DSAWithSHA1_BER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
AI_ECAcceleratorTable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
AI_ECBuildAcceleratorTable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
AI_ECBuildPubKeyAccelTable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
AI_EC_DHKeyAgree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
AI_EC_DSA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
AI_EC_DSAWithDigest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
AI_EC_ES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
AI_ECKeyGen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
AI_ECParameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
AI_ECParametersBER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
AI_ECParamGen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
AI_ECPubKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
AI_ECPubKeyBER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
AI_FeedbackCipher. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
AI_HMAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
AI_HW_Random. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
AI_KeypairTokenGen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
AI_MAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
AI_MD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
AI_MD2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
AI_MD2_BER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
AI_MD2_PEM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
AI_MD2Random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
AI_MD2WithDES_CBCPad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
AI_MD2WithDES_CBCPadBER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
AI_MD2WithRC2_CBCPad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
AI_MD2WithRC2_CBCPadBER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
AI_MD2WithRSAEncryption. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
AI_MD2WithRSAEncryptionBER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
AI_MD5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
AI_MD5_BER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
AI_MD5_PEM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
AI_MD5Random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Contents v
AI_MD5WithDES_CBCPad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .123
AI_MD5WithDES_CBCPadBER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .125
AI_MD5WithRC2_CBCPad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .127
AI_MD5WithRC2_CBCPadBER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .130
AI_MD5WithRSAEncryption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .132
AI_MD5WithRSAEncryptionBER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .134
AI_MD5WithXOR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .136
AI_MD5WithXOR_BER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .138
AI_PKCS_OAEP_RSAPrivate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .140
AI_PKCS_OAEP_RSAPrivateBER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .144
AI_PKCS_OAEP_RSAPublic. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .148
AI_PKCS_OAEP_RSAPublicBER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .152
AI_PKCS_OAEPRecode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .157
AI_PKCS_OAEPRecodeBER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .161
AI_PKCS_RSAPrivate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .166
AI_PKCS_RSAPrivateBER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .168
AI_PKCS_RSAPrivatePEM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .170
AI_PKCS_RSAPublic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .172
AI_PKCS_RSAPublicBER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .174
AI_PKCS_RSAPublicPEM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .176
AI_RC2_CBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .178
AI_RC2_CBC_BSAFE1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .180
AI_RC2_CBCPad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .182
AI_RC2_CBCPadBER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .184
AI_RC2_CBCPadPEM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .186
AI_RC4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .188
AI_RC4_BER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .190
AI_RC4WithMAC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .192
AI_RC4WithMAC_BER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .194
AI_RC5_CBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .196
AI_RC5_CBCPad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .198
AI_RC5_CBCPadBER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .200
AI_RC6_CBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .202
AI_RC6_CBCPad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .204
AI_RESET_IV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .206
AI_RFC1113Recode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
AI_RSAKeyGen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .208
AI_RSAPrivate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .210
AI_RSAPrivateBSAFE1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .212
AI_RSAPublic. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .214
AI_RSAPublicBSAFE1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .216
vi
RSA BSAFE Crypto-C Library Reference Manual
AI_RSAStrongKeyGen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
AI_SET_OAEP_RSAPrivate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
AI_SET_OAEP_RSAPublic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
AI_SHA1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
AI_SHA1_BER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
AI_SHA1Random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
AI_SHA1WithDES_CBCPad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
AI_SHA1WithDES_CBCPadBER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
AI_SHA1WithRSAEncryption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
AI_SHA1WithRSAEncryptionBER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
AI_SignVerify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
AI_SymKeyTokenGen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
AI_X931Random. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
AI_X962Random_V0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Chapter 3
Key Info Types 245
KI_8Byte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
KI_24Byte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
KI_DES8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
KI_DES8Strong . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
KI_DES24Strong . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
KI_DES_BSAFE1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
KI_DESX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
KI_DESX_BSAFE1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
KI_DSAPrivate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
KI_DSAPrivateBER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
KI_DSAPrivateX957BER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
KI_DSAPublic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
KI_DSAPublicBER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
KI_DSAPublicX957BER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
KI_ECPrivate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
KI_ECPrivateBER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
KI_ECPrivateComponent. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
KI_ECPrivateComponentBER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
KI_ECPublic. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
KI_ECPublicBER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
KI_ECPublicComponent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
KI_ECPublicComponentBER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
KI_ExtendedToken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
KI_Item . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
Contents vii
KI_KeypairToken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .274
KI_PKCS_RSAPrivate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .276
KI_PKCS_RSAPrivateBER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .278
KI_RC2_BSAFE1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .279
KI_RC2WithBSAFE1Params. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
KI_RSA_CRT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .281
KI_RSAPrivate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .282
KI_RSAPrivateBSAFE1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .284
KI_RSAPublic. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .285
KI_RSAPublicBER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .286
KI_RSAPublicBSAFE1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .287
KI_Token . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
Chapter 4
Details of Crypto-C Functions 289
B_BuildTableFinal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .290
B_BuildTableGetBufSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .291
B_BuildTableInit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .292
B_CreateAlgorithmObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .293
B_CreateKeyObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .294
B_CreateSessionChooser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .295
B_DecodeDigestInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .296
B_DecodeFinal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .297
B_DecodeInit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .298
B_DecodeUpdate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .299
B_DecryptFinal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .300
B_DecryptInit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .301
B_DecryptUpdate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .302
B_DestroyAlgorithmObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .303
B_DestroyKeyObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .304
B_DigestFinal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .305
B_DigestInit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .306
B_DigestUpdate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .307
B_EncodeDigestInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .308
B_EncodeFinal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .309
B_EncodeInit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .310
B_EncodeUpdate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .311
B_EncryptFinal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .312
B_EncryptInit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .313
B_EncryptUpdate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .314
B_FreeSessionChooser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
viii
RSA BSAFE Crypto-C Library Reference Manual
B_GenerateInit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
B_GenerateKeypair. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
B_GenerateParameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
B_GenerateRandomBytes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
B_GetAlgorithmInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
B_GetExtendedErrorInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
B_GetKeyExtendedErrorInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
B_GetKeyInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
B_IntegerBits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
B_KeyAgreeInit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
B_KeyAgreePhase1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
B_KeyAgreePhase2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
B_RandomInit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
B_RandomUpdate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
B_SetAlgorithmInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
B_SetKeyInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
B_SignFinal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
B_SignInit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
B_SignUpdate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
B_SymmetricKeyGenerate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
B_SymmetricKeyGenerateInit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
B_VerifyFinal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
B_VerifyInit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
B_VerifyUpdate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
T_free . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
T_malloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
T_memcmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
T_memcpy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
T_memmove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
T_memset. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
T_realloc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
T_strcmp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
T_strcpy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
T_strlen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Appendix A
Crypto-C Error Types 351
Appendix B
Platform-Specific Types and Constants 355
Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
POINTER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
Contents ix
UINT2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .355
UINT4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .356
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
Appendix C
References 359
Index 361
x
RSA BSAFE Crypto-C Library Reference Manual
1
Chapter 1
Introduction
This manual is a reference guide for developers who use RSA BSAFE
®
Crypto-C
(Crypto-C), a core-cryptography SDK.
To familiarize yourself with Crypto-C, you may wish to read the
Crypto-C Users
Manual
before referencing this manual. In particular, you may be interested in the
“Introductory Example” in Chapter 1. The
Users Manual
also describes cryptographic
concepts and shows how to successfully add Crypto-C to your application.
After you have read the
Users Manual
and understand the steps involved in creating a
Crypto-C application, you can turn to this reference manual. The algorithm
information types (AIs) carry the underlying cryptography, so we put this essential
information up front (Chapter 2). Next, the key information types (KIs) provide the
values for those AIs that require keys (Chapter 3). The last chapter (Chapter 4)
contains the application programming interface (API) itself. Make sure to read this
chapter, as it provides a review of the Crypto-C components.
Organization
2 RSA BSAFE Crypto-C Library Reference Manual
Organization
Chapter 1 introduces the components of the Crypto-C environment using a code
example.
Chapters 2 and 3 are alphabetical listings of Crypto-C algorithm info types and key
info types that specify the exact format of information supplied to and returned by
Crypto-C.
Chapter 4 lists Crypto-C’s functions alphabetically, giving full details of calling
format and error return codes.
Appendix A lists Crypto-C error types.
Appendix B lists platform-specific types and constants.
Appendix C lists reference documents.
Chapter 1 Introduction 3
The Crypto-C Environment
The Crypto-C Environment
The typical Crypto-C environment consists of five components:
an application
an algorithm chooser
a surrender function
the Crypto-C SDK
memory management routines
A Crypto-C component is specific to either an application or a platform, or it is part of
the Crypto-C SDK (see Figure 1-1).
Figure 1-1 The Crypto-C environment
The application can be an encryption application, a key-generation application, or
another similar application. The application calls Crypto-C and supplies the
algorithm chooser and a callback to the surrender function. The algorithm chooser
tells Crypto-C which method to use for a given algorithm. The surrender function
allows processing or canceling during lengthy operations.
The Crypto-C SDK performs the cryptographic functions, such as encryption and key
generation. The SDK is reentrant and suitable for shared or dynamic-link libraries.
Memory Management
Routines
Application
Algorithm Chooser
Surrender Function
Crypto-C SDK
Calls Calls
Callbacks
Toolkit
Procedures
Application-Specific
Procedures
Platform-Specfic
Procedures
Memory Management
4 RSA BSAFE Crypto-C Library Reference Manual
Memory Management
Crypto-C provides memory management routines that perform memory allocation
(
T_malloc, T_realloc and T_free) and memory operations (T_memcmp, T_memcpy,
T_memmove, and T_memset). These functions are modeled after conventional C library
functions such as
malloc, memset, etc. If you want to use the Crypto-C memory-
management functions, you must link in the
tstdlib.c file when you build your
application.
You can also supply your own versions of these functions if, for example, you need
platform-specific routines. In this case, you link to your application both your
memory-management functions and the Crypto-C library. Crypto-C will use these
statically linked functions in place of its memory management routines.
The BDEMO demonstration application provides a sample implementation of these
functions. See “Details of Crypto-C Functions” on page 289 for descriptions and
prototypes of these functions.
Chapter 1 Introduction 5
Code Example
Code Example
The following code example summarizes the six-step model used in Crypto-C. This
model is described in depth in Chapter 1 of the
Users Manual
. The example encrypts
data within a DES key, using a function named
EncryptData
. The inputs to
EncryptData
are: a pointer to the buffer, the data’s length, a pointer to the 8-byte DES key value,
and a pointer to the 8-byte initialization vector used by the
DES-CBC algorithm.
EncryptData
writes the encrypted data to the buffer supplied by the caller and returns
the length of the encrypted data.
#include “aglobal.h”
#include “bsafe.h”
#include “demochos.h”
#define NULL_SURRENDER_PTR ((A_SURRENDER_CTX *)NULL_PTR)
int EncryptData
(output, outputLen, maxOutputLen, input, inputLen, keyValue, iv)
unsigned char *output; /* pointer to output data */
unsigned int outputLen; /* pointer to length of encrypted data */
unsigned int maxOutputLen; /* size of output buffer */
unsigned char *input; /* pointer to input data buffer */
unsigned int inputLen; /* length of input data */
unsigned char *keyValue; /* pointer to 8-byte DES key */
unsigned char *iv; /* pointer to 8-byte initialization vector */
{
B_ALGORITHM_OBJ desAlgorithm = (B_ALGORITHM_OBJ)NULL_PTR;
B_KEY_OBJ desKey = (B_KEY_OBJ)NULL_PTR;
B_BLK_CIPHER_W_FEEDBACK_PARAMS feedbackParams;
ITEM initVector;
unsigned int partOutLen;
int status;
/* break commands jump to the end of the do while (0) block */
do {
if ((status = B_CreateKeyObject (&desKey)) != 0)
break;
if ((status = B_SetKeyInfo
(desKey, KI_DES8Strong, (POINTER)keyValue)) != 0)
break;
Code Example
6 RSA BSAFE Crypto-C Library Reference Manual
The main work in
EncryptData
is done by the functions B_EncryptInit,
B_EncryptUpdate, and B_EncryptFinal. The calling format for these and other
functions is shown in Chapter 4, “Details of Crypto-C Functions.” Most Crypto-C
procedures return either a zero for success or one of the error types listed in Appendix
A.
if ((status = B_CreateAlgorithmObject (&desAlgorithm)) != 0)
break;
initVector.data = iv;
initVector.len = 8;
feedbackParams.encryptionMethodName = “des”;
feedbackParams.encryptionParams = NULL_PTR;
feedbackParams.feedbackMethodName = “cbc”;
feedbackParams.feedbackParams = initVector;
feedbackParams.paddingMethodName = “pad”;
feedbackParams.paddingParams = NULL_PTR;
if ((status = B_SetAlgorithmInfo
(desAlgorithm, (POINTER)&AI_FeedbackCipher,
(POINTER)&feedbackParams)) != 0)
break;
if ((status = B_EncryptInit
(desAlgorithm, desKey, DEMO_ALGORITHM_CHOOSER,
NULL_SURRENDER_PTR)) != 0)
break;
if ((status = B_EncryptUpdate
(desAlgorithm, output, outputLen, maxOutputLen, input,
inputLen, (B_ALGORITHM_OBJ)NULL_PTR,
NULL_SURRENDER_PTR)) != 0)
break;
if ((status = B_EncryptFinal
(desAlgorithm, output + *outputLen, &partOutLen,
maxOutputLen - *outputLen, (B_ALGORITHM_OBJ)NULL_PTR,
NULL_SURRENDER_PTR)) != 0)
break;
*outputLen += partOutLen;
} while (0);
B_KEY_OBJ desKey = (B_KEY_OBJ)NULL_PTR;
B_ALGORITHM_OBJ desAlgorithm = (B_ALGORITHM_OBJ)NULL_PTR;
return (status);
}
Chapter 1 Introduction 7
Code Example
EncryptData
uses DEMO_ALGORITHM_CHOOSER as the
algorithmChooser
argument to
B_EncryptInit. The algorithm chooser is described on page 10. EncryptData also uses
(A_SURRENDER_CTX *)NULL_PTR as the
surrenderContext
argument to B_EncryptInit,
B_EncryptUpdate, and B_EncryptFinal. As explained in Chapter 4, this tells Crypto-C
to not call the surrender function. See the “The Surrender Function” on page 12 for an
explanation of Crypto-C’s surrender routine.
The Algorithm Object
8 RSA BSAFE Crypto-C Library Reference Manual
The Algorithm Object
In the above code example, B_EncryptInit, B_EncryptUpdate, and B_EncryptFinal
use an
algorithm object
called
desAlgorithm
. An algorithm object holds information
about an algorithm’s parameters (for example, the DES initialization vector), and
keeps a context during a cryptographic operation (for example, DES encryption).
Before Crypto-C can use an algorithm object, you must create and set it with
B_CreateAlgorithmObject and B_SetAlgorithmInfo.
Every algorithm object that is created by
B_CreateAlgorithmObject must be
destroyed by
B_DestroyAlgorithmObject. For security reasons, when Crypto-C
destroys an algorithm object, it zeroizes (sets to zero) and freezes any sensitive
memory that the object allocated. Note that you can use an algorithm object for either
encryption or decryption, but not for both. You must create separate algorithm objects
to handle each case. Once you set an algorithm, do not reset it. In other words, once
you call
B_SetAlgorithmInfo for a particular algorithm object, do not call it again for
the same object until that object has been destroyed and recreated.
As shown in Chapter 4, page 330,
B_SetAlgorithmInfo has three input arguments,
algorithmObject
,
infoType
, and
info.algorithmObject
is the name of the algorithm
object you are setting.
infoType
is one of the algorithm info types (AIs) listed in
Chapter 2. The AI specifies which algorithm to use, such as DES-CBC, as well as the
format of the actual algorithm information supplied by
info
.
As shown in Chapter 2, page 85, the format of
info
supplied to B_SetAlgorithmInfo
for
AI_FeedbackCipher is a pointer to a B_BLK_CIPHER_W_FEEDBACK_PARAMS structure
that holds the necessary information for the encryption object. This data includes the
encryption method name (
“des”), the feedback method name (“cbc”), and a pointer
to an
ITEM structure that contains the 8 bytes of the initialization vector (
iv
), which
seeds the process. In the preceding example, the data in the
ITEM structure is the
iv
input argument to
EncryptData
.
Chapter 1 Introduction 9
The Key Object
The Key Object
In the above code example, B_EncryptInit uses a
key object
called
desKey
. A key object
holds a key’s value, such as the DES key, and supplies this value to a function, such as
B_EncryptInit, that needs a key. A key object also receives the output of key
generation such as
B_GenerateKeypair.
Before Crypto-C can use a key object, you must create and set it with
B_CreateKeyObject and B_SetKeyInfo. Every key object created by
B_CreateKeyObject must be destroyed by B_DestroyKeyObject. For security reasons,
when Crypto-C destroys a key object, it zeroizes (sets to zero) and freezes any
sensitive memory that the object allocated. Once you call
B_SetKeyInfo for a
particular key object, do not call it again for the same object until it has been destroyed
and recreated.
As shown in Chapter 4, page 331,
B_SetKeyInfo has two input arguments,
infoType
and
info
.
infoType
is one of the KI key info types listed in Chapter 3. The key info type
specifies the format of the actual key information supplied by
info
.
As shown in Chapter 3, the format of
info
supplied to B_SetKeyInfo for
KI_DES8Strong is a pointer to an unsigned char array that holds the 8-byte DES key.
In the code example on page 5, this is the
keyValue
input argument to
EncryptData
.
The Algorithm Chooser
10 RSA BSAFE Crypto-C Library Reference Manual
The Algorithm Chooser
The algorithm chooser lists all the algorithm methods that Crypto-C will use in the
application. In this way, you only link in the code you need, and thereby reduce the
executable size.
The BDEMO Algorithm Chooser
The BDEMO demonstration application supplied with Crypto-C defines an algorithm
chooser called
DEMO_ALGORITHM_CHOOSER. To use the BDEMO algorithm chooser,
compile and link the module that defines
DEMO_ALGORITHM_CHOOSER (as it is done for
BDEMO) and specify
DEMO_ALGORITHM_CHOOSER as the
algorithmChooser
argument.
Defining an Algorithm Chooser
The main reason for an application to define its own algorithm chooser is to make the
executable image smaller. The linker links in the object code for all algorithm methods
listed in the algorithm chooser. To illustrate, an application that only uses MD5 and
DES-CBC may define an algorithm chooser with only the MD5 and DES-CBC
methods. In this way, the linker will only link in the object code related to MD5 and
DES-CBC.
An algorithm chooser is an array of pointers to
B_ALGORITHM_METHOD values. The last
element of the array must be
(B_ALGORITHM_METHOD *)NULL_PTR. The following is an
example that defines an algorithm chooser called
MD5_DES_CBC_CHOOSER for the MD5
and DES-CBC algorithm methods needed when using the
AI_MD5WithDES_CBCPad
algorithm info type:
For additional examples of algorithm choosers, see “Algorithm Choosers” on
page 118 of the
Users Manual
.
Notice that encryption/decryption algorithm methods (AMs) such as DES-CBC, have
separate entries for encryption and decryption. This separation of methods enables a
B_ALGORITHM_METHOD *MD5_DES_CBC_CHOOSER[] = {
&AM_MD5,
&AM_DES_CBC_ENCRYPT,
&AM_DES_CBC_DECRYPT,
(B_ALGORITHM_METHOD *)NULL_PTR
};
  • Page 1 1
  • Page 2 2
  • Page 3 3
  • Page 4 4
  • Page 5 5
  • Page 6 6
  • Page 7 7
  • Page 8 8
  • Page 9 9
  • Page 10 10
  • Page 11 11
  • Page 12 12
  • Page 13 13
  • Page 14 14
  • Page 15 15
  • Page 16 16
  • Page 17 17
  • Page 18 18
  • Page 19 19
  • Page 20 20
  • Page 21 21
  • Page 22 22
  • Page 23 23
  • Page 24 24
  • Page 25 25
  • Page 26 26
  • Page 27 27
  • Page 28 28
  • Page 29 29
  • Page 30 30
  • Page 31 31
  • Page 32 32
  • Page 33 33
  • Page 34 34
  • Page 35 35
  • Page 36 36
  • Page 37 37
  • Page 38 38
  • Page 39 39
  • Page 40 40
  • Page 41 41
  • Page 42 42
  • Page 43 43
  • Page 44 44
  • Page 45 45
  • Page 46 46
  • Page 47 47
  • Page 48 48
  • Page 49 49
  • Page 50 50
  • Page 51 51
  • Page 52 52
  • Page 53 53
  • Page 54 54
  • Page 55 55
  • Page 56 56
  • Page 57 57
  • Page 58 58
  • Page 59 59
  • Page 60 60
  • Page 61 61
  • Page 62 62
  • Page 63 63
  • Page 64 64
  • Page 65 65
  • Page 66 66
  • Page 67 67
  • Page 68 68
  • Page 69 69
  • Page 70 70
  • Page 71 71
  • Page 72 72
  • Page 73 73
  • Page 74 74
  • Page 75 75
  • Page 76 76
  • Page 77 77
  • Page 78 78
  • Page 79 79
  • Page 80 80
  • Page 81 81
  • Page 82 82
  • Page 83 83
  • Page 84 84
  • Page 85 85
  • Page 86 86
  • Page 87 87
  • Page 88 88
  • Page 89 89
  • Page 90 90
  • Page 91 91
  • Page 92 92
  • Page 93 93
  • Page 94 94
  • Page 95 95
  • Page 96 96
  • Page 97 97
  • Page 98 98
  • Page 99 99
  • Page 100 100
  • Page 101 101
  • Page 102 102
  • Page 103 103
  • Page 104 104
  • Page 105 105
  • Page 106 106
  • Page 107 107
  • Page 108 108
  • Page 109 109
  • Page 110 110
  • Page 111 111
  • Page 112 112
  • Page 113 113
  • Page 114 114
  • Page 115 115
  • Page 116 116
  • Page 117 117
  • Page 118 118
  • Page 119 119
  • Page 120 120
  • Page 121 121
  • Page 122 122
  • Page 123 123
  • Page 124 124
  • Page 125 125
  • Page 126 126
  • Page 127 127
  • Page 128 128
  • Page 129 129
  • Page 130 130
  • Page 131 131
  • Page 132 132
  • Page 133 133
  • Page 134 134
  • Page 135 135
  • Page 136 136
  • Page 137 137
  • Page 138 138
  • Page 139 139
  • Page 140 140
  • Page 141 141
  • Page 142 142
  • Page 143 143
  • Page 144 144
  • Page 145 145
  • Page 146 146
  • Page 147 147
  • Page 148 148
  • Page 149 149
  • Page 150 150
  • Page 151 151
  • Page 152 152
  • Page 153 153
  • Page 154 154
  • Page 155 155
  • Page 156 156
  • Page 157 157
  • Page 158 158
  • Page 159 159
  • Page 160 160
  • Page 161 161
  • Page 162 162
  • Page 163 163
  • Page 164 164
  • Page 165 165
  • Page 166 166
  • Page 167 167
  • Page 168 168
  • Page 169 169
  • Page 170 170
  • Page 171 171
  • Page 172 172
  • Page 173 173
  • Page 174 174
  • Page 175 175
  • Page 176 176
  • Page 177 177
  • Page 178 178
  • Page 179 179
  • Page 180 180
  • Page 181 181
  • Page 182 182
  • Page 183 183
  • Page 184 184
  • Page 185 185
  • Page 186 186
  • Page 187 187
  • Page 188 188
  • Page 189 189
  • Page 190 190
  • Page 191 191
  • Page 192 192
  • Page 193 193
  • Page 194 194
  • Page 195 195
  • Page 196 196
  • Page 197 197
  • Page 198 198
  • Page 199 199
  • Page 200 200
  • Page 201 201
  • Page 202 202
  • Page 203 203
  • Page 204 204
  • Page 205 205
  • Page 206 206
  • Page 207 207
  • Page 208 208
  • Page 209 209
  • Page 210 210
  • Page 211 211
  • Page 212 212
  • Page 213 213
  • Page 214 214
  • Page 215 215
  • Page 216 216
  • Page 217 217
  • Page 218 218
  • Page 219 219
  • Page 220 220
  • Page 221 221
  • Page 222 222
  • Page 223 223
  • Page 224 224
  • Page 225 225
  • Page 226 226
  • Page 227 227
  • Page 228 228
  • Page 229 229
  • Page 230 230
  • Page 231 231
  • Page 232 232
  • Page 233 233
  • Page 234 234
  • Page 235 235
  • Page 236 236
  • Page 237 237
  • Page 238 238
  • Page 239 239
  • Page 240 240
  • Page 241 241
  • Page 242 242
  • Page 243 243
  • Page 244 244
  • Page 245 245
  • Page 246 246
  • Page 247 247
  • Page 248 248
  • Page 249 249
  • Page 250 250
  • Page 251 251
  • Page 252 252
  • Page 253 253
  • Page 254 254
  • Page 255 255
  • Page 256 256
  • Page 257 257
  • Page 258 258
  • Page 259 259
  • Page 260 260
  • Page 261 261
  • Page 262 262
  • Page 263 263
  • Page 264 264
  • Page 265 265
  • Page 266 266
  • Page 267 267
  • Page 268 268
  • Page 269 269
  • Page 270 270
  • Page 271 271
  • Page 272 272
  • Page 273 273
  • Page 274 274
  • Page 275 275
  • Page 276 276
  • Page 277 277
  • Page 278 278
  • Page 279 279
  • Page 280 280
  • Page 281 281
  • Page 282 282
  • Page 283 283
  • Page 284 284
  • Page 285 285
  • Page 286 286
  • Page 287 287
  • Page 288 288
  • Page 289 289
  • Page 290 290
  • Page 291 291
  • Page 292 292
  • Page 293 293
  • Page 294 294
  • Page 295 295
  • Page 296 296
  • Page 297 297
  • Page 298 298
  • Page 299 299
  • Page 300 300
  • Page 301 301
  • Page 302 302
  • Page 303 303
  • Page 304 304
  • Page 305 305
  • Page 306 306
  • Page 307 307
  • Page 308 308
  • Page 309 309
  • Page 310 310
  • Page 311 311
  • Page 312 312
  • Page 313 313
  • Page 314 314
  • Page 315 315
  • Page 316 316
  • Page 317 317
  • Page 318 318
  • Page 319 319
  • Page 320 320
  • Page 321 321
  • Page 322 322
  • Page 323 323
  • Page 324 324
  • Page 325 325
  • Page 326 326
  • Page 327 327
  • Page 328 328
  • Page 329 329
  • Page 330 330
  • Page 331 331
  • Page 332 332
  • Page 333 333
  • Page 334 334
  • Page 335 335
  • Page 336 336
  • Page 337 337
  • Page 338 338
  • Page 339 339
  • Page 340 340
  • Page 341 341
  • Page 342 342
  • Page 343 343
  • Page 344 344
  • Page 345 345
  • Page 346 346
  • Page 347 347
  • Page 348 348
  • Page 349 349
  • Page 350 350
  • Page 351 351
  • Page 352 352
  • Page 353 353
  • Page 354 354
  • Page 355 355
  • Page 356 356
  • Page 357 357
  • Page 358 358
  • Page 359 359
  • Page 360 360
  • Page 361 361
  • Page 362 362
  • Page 363 363
  • Page 364 364
  • Page 365 365
  • Page 366 366
  • Page 367 367
  • Page 368 368
  • Page 369 369
  • Page 370 370
  • Page 371 371
  • Page 372 372
  • Page 373 373
  • Page 374 374
  • Page 375 375
  • Page 376 376

RSA Security 5 User manual

Category
Projection TVs
Type
User manual

Ask a question and I''ll find the answer in the document

Finding information in a document is now easier with AI