comparison src/pk/pkcs1/pkcs_1_oaep_encode.c @ 210:4768b55c5240 libtomcrypt

propagate from branch 'au.asn.ucc.matt.ltc-orig' (head 33c416b902f1a44913d825bae7ad9a160f703ed3) to branch 'au.asn.ucc.matt.dropbear.ltc' (head 4d6aec6e6121e13f68c11c149b6579c41cb63e74)
author Matt Johnston <matt@ucc.asn.au>
date Wed, 06 Jul 2005 12:10:23 +0000
parents 39d5d58461d6
children
comparison
equal deleted inserted replaced
199:8be64e2c86f4 210:4768b55c5240
64 } 64 }
65 65
66 /* allocate ram for DB/mask/salt of size modulus_len */ 66 /* allocate ram for DB/mask/salt of size modulus_len */
67 DB = XMALLOC(modulus_len); 67 DB = XMALLOC(modulus_len);
68 mask = XMALLOC(modulus_len); 68 mask = XMALLOC(modulus_len);
69 seed = XMALLOC(modulus_len); 69 seed = XMALLOC(hLen);
70 if (DB == NULL || mask == NULL || seed == NULL) { 70 if (DB == NULL || mask == NULL || seed == NULL) {
71 if (DB != NULL) { 71 if (DB != NULL) {
72 XFREE(DB); 72 XFREE(DB);
73 } 73 }
74 if (mask != NULL) { 74 if (mask != NULL) {
95 } 95 }
96 96
97 /* append PS then 0x01 (to lhash) */ 97 /* append PS then 0x01 (to lhash) */
98 x = hLen; 98 x = hLen;
99 y = modulus_len - msglen - 2*hLen - 2; 99 y = modulus_len - msglen - 2*hLen - 2;
100 while (y--) { 100 XMEMSET(DB+x, 0, y);
101 DB[x++] = 0x00; 101 x += y;
102 } 102
103 /* 0x01 byte */
103 DB[x++] = 0x01; 104 DB[x++] = 0x01;
104 105
105 /* message */ 106 /* message (length = msglen) */
106 y = msglen; 107 XMEMCPY(DB+x, msg, msglen);
107 while (y--) { 108 x += msglen;
108 DB[x++] = *msg++;
109 }
110 109
111 /* now choose a random seed */ 110 /* now choose a random seed */
112 if (prng_descriptor[prng_idx].read(seed, hLen, prng) != hLen) { 111 if (prng_descriptor[prng_idx].read(seed, hLen, prng) != hLen) {
113 err = CRYPT_ERROR_READPRNG; 112 err = CRYPT_ERROR_READPRNG;
114 goto LBL_ERR; 113 goto LBL_ERR;
141 } 140 }
142 141
143 /* start output which is 0x00 || maskedSeed || maskedDB */ 142 /* start output which is 0x00 || maskedSeed || maskedDB */
144 x = 0; 143 x = 0;
145 out[x++] = 0x00; 144 out[x++] = 0x00;
146 for (y = 0; y < hLen; y++) { 145 XMEMCPY(out+x, seed, hLen);
147 out[x++] = seed[y]; 146 x += hLen;
148 } 147 XMEMCPY(out+x, DB, modulus_len - hLen - 1);
149 for (y = 0; y < modulus_len - hLen - 1; y++) { 148 x += modulus_len - hLen - 1;
150 out[x++] = DB[y]; 149
151 }
152 *outlen = x; 150 *outlen = x;
153 151
154 err = CRYPT_OK; 152 err = CRYPT_OK;
155 LBL_ERR: 153 LBL_ERR:
156 #ifdef LTC_CLEAN_STACK 154 #ifdef LTC_CLEAN_STACK
157 zeromem(DB, modulus_len); 155 zeromem(DB, modulus_len);
158 zeromem(seed, modulus_len); 156 zeromem(seed, hLen);
159 zeromem(mask, modulus_len); 157 zeromem(mask, modulus_len);
160 #endif 158 #endif
161 159
162 XFREE(seed); 160 XFREE(seed);
163 XFREE(mask); 161 XFREE(mask);
166 return err; 164 return err;
167 } 165 }
168 166
169 #endif /* PKCS_1 */ 167 #endif /* PKCS_1 */
170 168
169
170 /* $Source: /cvs/libtom/libtomcrypt/src/pk/pkcs1/pkcs_1_oaep_encode.c,v $ */
171 /* $Revision: 1.4 $ */
172 /* $Date: 2005/05/05 14:35:59 $ */