comparison src/pk/pkcs1/pkcs_1_pss_encode.c @ 209:39d5d58461d6 libtomcrypt-orig LTC_1.05

Import of libtomcrypt 1.05
author Matt Johnston <matt@ucc.asn.au>
date Wed, 06 Jul 2005 03:53:40 +0000
parents 1c15b283127b
children
comparison
equal deleted inserted replaced
191:1c15b283127b 209:39d5d58461d6
108 if ((err = hash_descriptor[hash_idx].done(&md, hash)) != CRYPT_OK) { 108 if ((err = hash_descriptor[hash_idx].done(&md, hash)) != CRYPT_OK) {
109 goto LBL_ERR; 109 goto LBL_ERR;
110 } 110 }
111 111
112 /* generate DB = PS || 0x01 || salt, PS == modulus_len - saltlen - hLen - 2 zero bytes */ 112 /* generate DB = PS || 0x01 || salt, PS == modulus_len - saltlen - hLen - 2 zero bytes */
113 for (x = 0; x < (modulus_len - saltlen - hLen - 2); x++) { 113 x = 0;
114 DB[x] = 0x00; 114 XMEMSET(DB + x, 0, modulus_len - saltlen - hLen - 2);
115 } 115 x += modulus_len - saltlen - hLen - 2;
116 DB[x++] = 0x01; 116 DB[x++] = 0x01;
117 for (y = 0; y < saltlen; y++) { 117 XMEMCPY(DB + x, salt, saltlen);
118 DB[x++] = salt[y]; 118 x += saltlen;
119 }
120 119
121 /* generate mask of length modulus_len - hLen - 1 from hash */ 120 /* generate mask of length modulus_len - hLen - 1 from hash */
122 if ((err = pkcs_1_mgf1(hash, hLen, hash_idx, mask, modulus_len - hLen - 1)) != CRYPT_OK) { 121 if ((err = pkcs_1_mgf1(hash, hLen, hash_idx, mask, modulus_len - hLen - 1)) != CRYPT_OK) {
123 goto LBL_ERR; 122 goto LBL_ERR;
124 } 123 }
132 if (*outlen < modulus_len) { 131 if (*outlen < modulus_len) {
133 err = CRYPT_BUFFER_OVERFLOW; 132 err = CRYPT_BUFFER_OVERFLOW;
134 goto LBL_ERR; 133 goto LBL_ERR;
135 } 134 }
136 135
137 /* DB */ 136 /* DB len = modulus_len - hLen - 1 */
138 for (y = x = 0; x < modulus_len - hLen - 1; x++) { 137 y = 0;
139 out[y++] = DB[x]; 138 XMEMCPY(out + y, DB, modulus_len - hLen - 1);
140 } 139 y += modulus_len - hLen - 1;
140
141 /* hash */ 141 /* hash */
142 for (x = 0; x < hLen; x++) { 142 XMEMCPY(out + y, hash, hLen);
143 out[y++] = hash[x]; 143 y += hLen;
144 } 144
145 /* 0xBC */ 145 /* 0xBC */
146 out[y] = 0xBC; 146 out[y] = 0xBC;
147 147
148 /* now clear the 8*modulus_len - modulus_bitlen most significant bits */ 148 /* now clear the 8*modulus_len - modulus_bitlen most significant bits */
149 out[0] &= 0xFF >> ((modulus_len<<3) - (modulus_bitlen-1)); 149 out[0] &= 0xFF >> ((modulus_len<<3) - (modulus_bitlen-1));
166 166
167 return err; 167 return err;
168 } 168 }
169 169
170 #endif /* PKCS_1 */ 170 #endif /* PKCS_1 */
171
172 /* $Source: /cvs/libtom/libtomcrypt/src/pk/pkcs1/pkcs_1_pss_encode.c,v $ */
173 /* $Revision: 1.4 $ */
174 /* $Date: 2005/05/05 14:35:59 $ */