Lines Matching refs:key
32 static void subM(const RSAPublicKey* key,
36 for (i = 0; i < key->len; ++i) {
37 A += (uint64_t)a[i] - key->n[i];
44 static int geM(const RSAPublicKey* key,
47 for (i = key->len; i;) {
49 if (a[i] < key->n[i]) return 0;
50 if (a[i] > key->n[i]) return 1;
56 static void montMulAdd(const RSAPublicKey* key,
61 uint32_t d0 = (uint32_t)A * key->n0inv;
62 uint64_t B = (uint64_t)d0 * key->n[0] + (uint32_t)A;
65 for (i = 1; i < key->len; ++i) {
67 B = (B >> 32) + (uint64_t)d0 * key->n[i] + (uint32_t)A;
76 subM(key, c);
81 static void montMul(const RSAPublicKey* key,
86 for (i = 0; i < key->len; ++i) {
89 for (i = 0; i < key->len; ++i) {
90 montMulAdd(key, c, a[i], b);
96 static void modpowF4(const RSAPublicKey* key,
105 for (i = 0; i < key->len; ++i) {
107 (inout[((key->len - 1 - i) * 4) + 0] << 24) |
108 (inout[((key->len - 1 - i) * 4) + 1] << 16) |
109 (inout[((key->len - 1 - i) * 4) + 2] << 8) |
110 (inout[((key->len - 1 - i) * 4) + 3] << 0);
114 montMul(key, aR, a, key->rr); // aR = a * RR / R mod M
116 montMul(key, aaR, aR, aR); // aaR = aR * aR / R mod M
117 montMul(key, aR, aaR, aaR); // aR = aaR * aaR / R mod M
119 montMul(key, aaa, aR, a); // aaa = aR * a / R mod M
122 if (geM(key, aaa)) {
123 subM(key, aaa);
127 for (i = key->len - 1; i >= 0; --i) {
155 int RSA_e_f4_verify(const RSAPublicKey* key,
162 if (key->len != RSANUMWORDS) {
163 return 0; // Wrong key passed in.
170 if (key->exponent != 65537) {
178 modpowF4(key, buf); // In-place exponentiation.