diff options
author | Tadeusz Struk <tadeusz.struk@intel.com> | 2015-06-16 13:31:06 -0400 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2015-06-17 05:03:54 -0400 |
commit | 946cc46372dcf8e34f21a6d06826c2aa1822b642 (patch) | |
tree | 78b21157d83c26d606ebb3a516f3b7da0633702d /crypto | |
parent | cfc2bb32b31371d6bffc6bf2da3548f20ad48c83 (diff) |
crypto: testmgr - add tests vectors for RSA
New test vectors for RSA algorithm.
Signed-off-by: Tadeusz Struk <tadeusz.struk@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/Kconfig | 1 | ||||
-rw-r--r-- | crypto/testmgr.c | 158 | ||||
-rw-r--r-- | crypto/testmgr.h | 187 |
3 files changed, 346 insertions, 0 deletions
diff --git a/crypto/Kconfig b/crypto/Kconfig index d6b2a8b68143..6c79ef0e168d 100644 --- a/crypto/Kconfig +++ b/crypto/Kconfig | |||
@@ -121,6 +121,7 @@ config CRYPTO_MANAGER2 | |||
121 | select CRYPTO_HASH2 | 121 | select CRYPTO_HASH2 |
122 | select CRYPTO_BLKCIPHER2 | 122 | select CRYPTO_BLKCIPHER2 |
123 | select CRYPTO_PCOMP2 | 123 | select CRYPTO_PCOMP2 |
124 | select CRYPTO_AKCIPHER2 | ||
124 | 125 | ||
125 | config CRYPTO_USER | 126 | config CRYPTO_USER |
126 | tristate "Userspace cryptographic algorithm configuration" | 127 | tristate "Userspace cryptographic algorithm configuration" |
diff --git a/crypto/testmgr.c b/crypto/testmgr.c index ccd19cfee995..975e1eac3e2d 100644 --- a/crypto/testmgr.c +++ b/crypto/testmgr.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <linux/string.h> | 30 | #include <linux/string.h> |
31 | #include <crypto/rng.h> | 31 | #include <crypto/rng.h> |
32 | #include <crypto/drbg.h> | 32 | #include <crypto/drbg.h> |
33 | #include <crypto/akcipher.h> | ||
33 | 34 | ||
34 | #include "internal.h" | 35 | #include "internal.h" |
35 | 36 | ||
@@ -116,6 +117,11 @@ struct drbg_test_suite { | |||
116 | unsigned int count; | 117 | unsigned int count; |
117 | }; | 118 | }; |
118 | 119 | ||
120 | struct akcipher_test_suite { | ||
121 | struct akcipher_testvec *vecs; | ||
122 | unsigned int count; | ||
123 | }; | ||
124 | |||
119 | struct alg_test_desc { | 125 | struct alg_test_desc { |
120 | const char *alg; | 126 | const char *alg; |
121 | int (*test)(const struct alg_test_desc *desc, const char *driver, | 127 | int (*test)(const struct alg_test_desc *desc, const char *driver, |
@@ -130,6 +136,7 @@ struct alg_test_desc { | |||
130 | struct hash_test_suite hash; | 136 | struct hash_test_suite hash; |
131 | struct cprng_test_suite cprng; | 137 | struct cprng_test_suite cprng; |
132 | struct drbg_test_suite drbg; | 138 | struct drbg_test_suite drbg; |
139 | struct akcipher_test_suite akcipher; | ||
133 | } suite; | 140 | } suite; |
134 | }; | 141 | }; |
135 | 142 | ||
@@ -1825,6 +1832,147 @@ static int alg_test_drbg(const struct alg_test_desc *desc, const char *driver, | |||
1825 | 1832 | ||
1826 | } | 1833 | } |
1827 | 1834 | ||
1835 | static int do_test_rsa(struct crypto_akcipher *tfm, | ||
1836 | struct akcipher_testvec *vecs) | ||
1837 | { | ||
1838 | struct akcipher_request *req; | ||
1839 | void *outbuf_enc = NULL; | ||
1840 | void *outbuf_dec = NULL; | ||
1841 | struct tcrypt_result result; | ||
1842 | unsigned int out_len_max, out_len = 0; | ||
1843 | int err = -ENOMEM; | ||
1844 | |||
1845 | req = akcipher_request_alloc(tfm, GFP_KERNEL); | ||
1846 | if (!req) | ||
1847 | return err; | ||
1848 | |||
1849 | init_completion(&result.completion); | ||
1850 | err = crypto_akcipher_setkey(tfm, vecs->key, vecs->key_len); | ||
1851 | if (err) | ||
1852 | goto free_req; | ||
1853 | |||
1854 | akcipher_request_set_crypt(req, vecs->m, outbuf_enc, vecs->m_size, | ||
1855 | out_len); | ||
1856 | /* expect this to fail, and update the required buf len */ | ||
1857 | crypto_akcipher_encrypt(req); | ||
1858 | out_len = req->dst_len; | ||
1859 | if (!out_len) { | ||
1860 | err = -EINVAL; | ||
1861 | goto free_req; | ||
1862 | } | ||
1863 | |||
1864 | out_len_max = out_len; | ||
1865 | err = -ENOMEM; | ||
1866 | outbuf_enc = kzalloc(out_len_max, GFP_KERNEL); | ||
1867 | if (!outbuf_enc) | ||
1868 | goto free_req; | ||
1869 | |||
1870 | akcipher_request_set_crypt(req, vecs->m, outbuf_enc, vecs->m_size, | ||
1871 | out_len); | ||
1872 | akcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG, | ||
1873 | tcrypt_complete, &result); | ||
1874 | |||
1875 | /* Run RSA encrypt - c = m^e mod n;*/ | ||
1876 | err = wait_async_op(&result, crypto_akcipher_encrypt(req)); | ||
1877 | if (err) { | ||
1878 | pr_err("alg: rsa: encrypt test failed. err %d\n", err); | ||
1879 | goto free_all; | ||
1880 | } | ||
1881 | if (out_len != vecs->c_size) { | ||
1882 | pr_err("alg: rsa: encrypt test failed. Invalid output len\n"); | ||
1883 | err = -EINVAL; | ||
1884 | goto free_all; | ||
1885 | } | ||
1886 | /* verify that encrypted message is equal to expected */ | ||
1887 | if (memcmp(vecs->c, outbuf_enc, vecs->c_size)) { | ||
1888 | pr_err("alg: rsa: encrypt test failed. Invalid output\n"); | ||
1889 | err = -EINVAL; | ||
1890 | goto free_all; | ||
1891 | } | ||
1892 | /* Don't invoke decrypt for vectors with public key */ | ||
1893 | if (vecs->public_key_vec) { | ||
1894 | err = 0; | ||
1895 | goto free_all; | ||
1896 | } | ||
1897 | outbuf_dec = kzalloc(out_len_max, GFP_KERNEL); | ||
1898 | if (!outbuf_dec) { | ||
1899 | err = -ENOMEM; | ||
1900 | goto free_all; | ||
1901 | } | ||
1902 | init_completion(&result.completion); | ||
1903 | akcipher_request_set_crypt(req, outbuf_enc, outbuf_dec, vecs->c_size, | ||
1904 | out_len); | ||
1905 | |||
1906 | /* Run RSA decrypt - m = c^d mod n;*/ | ||
1907 | err = wait_async_op(&result, crypto_akcipher_decrypt(req)); | ||
1908 | if (err) { | ||
1909 | pr_err("alg: rsa: decrypt test failed. err %d\n", err); | ||
1910 | goto free_all; | ||
1911 | } | ||
1912 | out_len = req->dst_len; | ||
1913 | if (out_len != vecs->m_size) { | ||
1914 | pr_err("alg: rsa: decrypt test failed. Invalid output len\n"); | ||
1915 | err = -EINVAL; | ||
1916 | goto free_all; | ||
1917 | } | ||
1918 | /* verify that decrypted message is equal to the original msg */ | ||
1919 | if (memcmp(vecs->m, outbuf_dec, vecs->m_size)) { | ||
1920 | pr_err("alg: rsa: decrypt test failed. Invalid output\n"); | ||
1921 | err = -EINVAL; | ||
1922 | } | ||
1923 | free_all: | ||
1924 | kfree(outbuf_dec); | ||
1925 | kfree(outbuf_enc); | ||
1926 | free_req: | ||
1927 | akcipher_request_free(req); | ||
1928 | return err; | ||
1929 | } | ||
1930 | |||
1931 | static int test_rsa(struct crypto_akcipher *tfm, struct akcipher_testvec *vecs, | ||
1932 | unsigned int tcount) | ||
1933 | { | ||
1934 | int ret, i; | ||
1935 | |||
1936 | for (i = 0; i < tcount; i++) { | ||
1937 | ret = do_test_rsa(tfm, vecs++); | ||
1938 | if (ret) { | ||
1939 | pr_err("alg: rsa: test failed on vector %d, err=%d\n", | ||
1940 | i + 1, ret); | ||
1941 | return ret; | ||
1942 | } | ||
1943 | } | ||
1944 | return 0; | ||
1945 | } | ||
1946 | |||
1947 | static int test_akcipher(struct crypto_akcipher *tfm, const char *alg, | ||
1948 | struct akcipher_testvec *vecs, unsigned int tcount) | ||
1949 | { | ||
1950 | if (strncmp(alg, "rsa", 3) == 0) | ||
1951 | return test_rsa(tfm, vecs, tcount); | ||
1952 | |||
1953 | return 0; | ||
1954 | } | ||
1955 | |||
1956 | static int alg_test_akcipher(const struct alg_test_desc *desc, | ||
1957 | const char *driver, u32 type, u32 mask) | ||
1958 | { | ||
1959 | struct crypto_akcipher *tfm; | ||
1960 | int err = 0; | ||
1961 | |||
1962 | tfm = crypto_alloc_akcipher(driver, type | CRYPTO_ALG_INTERNAL, mask); | ||
1963 | if (IS_ERR(tfm)) { | ||
1964 | pr_err("alg: akcipher: Failed to load tfm for %s: %ld\n", | ||
1965 | driver, PTR_ERR(tfm)); | ||
1966 | return PTR_ERR(tfm); | ||
1967 | } | ||
1968 | if (desc->suite.akcipher.vecs) | ||
1969 | err = test_akcipher(tfm, desc->alg, desc->suite.akcipher.vecs, | ||
1970 | desc->suite.akcipher.count); | ||
1971 | |||
1972 | crypto_free_akcipher(tfm); | ||
1973 | return err; | ||
1974 | } | ||
1975 | |||
1828 | static int alg_test_null(const struct alg_test_desc *desc, | 1976 | static int alg_test_null(const struct alg_test_desc *desc, |
1829 | const char *driver, u32 type, u32 mask) | 1977 | const char *driver, u32 type, u32 mask) |
1830 | { | 1978 | { |
@@ -3453,6 +3601,16 @@ static const struct alg_test_desc alg_test_descs[] = { | |||
3453 | } | 3601 | } |
3454 | } | 3602 | } |
3455 | }, { | 3603 | }, { |
3604 | .alg = "rsa", | ||
3605 | .test = alg_test_akcipher, | ||
3606 | .fips_allowed = 1, | ||
3607 | .suite = { | ||
3608 | .akcipher = { | ||
3609 | .vecs = rsa_tv_template, | ||
3610 | .count = RSA_TEST_VECTORS | ||
3611 | } | ||
3612 | } | ||
3613 | }, { | ||
3456 | .alg = "salsa20", | 3614 | .alg = "salsa20", |
3457 | .test = alg_test_skcipher, | 3615 | .test = alg_test_skcipher, |
3458 | .suite = { | 3616 | .suite = { |
diff --git a/crypto/testmgr.h b/crypto/testmgr.h index 35f37bcbc0d9..868edf117041 100644 --- a/crypto/testmgr.h +++ b/crypto/testmgr.h | |||
@@ -125,9 +125,196 @@ struct drbg_testvec { | |||
125 | size_t expectedlen; | 125 | size_t expectedlen; |
126 | }; | 126 | }; |
127 | 127 | ||
128 | struct akcipher_testvec { | ||
129 | unsigned char *key; | ||
130 | unsigned char *m; | ||
131 | unsigned char *c; | ||
132 | unsigned int key_len; | ||
133 | unsigned int m_size; | ||
134 | unsigned int c_size; | ||
135 | bool public_key_vec; | ||
136 | }; | ||
137 | |||
128 | static char zeroed_string[48]; | 138 | static char zeroed_string[48]; |
129 | 139 | ||
130 | /* | 140 | /* |
141 | * RSA test vectors. Borrowed from openSSL. | ||
142 | */ | ||
143 | #ifdef CONFIG_CRYPTO_FIPS | ||
144 | #define RSA_TEST_VECTORS 2 | ||
145 | #else | ||
146 | #define RSA_TEST_VECTORS 4 | ||
147 | #endif | ||
148 | static struct akcipher_testvec rsa_tv_template[] = { | ||
149 | { | ||
150 | #ifndef CONFIG_CRYPTO_FIPS | ||
151 | .key = | ||
152 | "\x30\x81\x88" /* sequence of 136 bytes */ | ||
153 | "\x02\x41" /* modulus - integer of 65 bytes */ | ||
154 | "\x00\xAA\x36\xAB\xCE\x88\xAC\xFD\xFF\x55\x52\x3C\x7F\xC4\x52\x3F" | ||
155 | "\x90\xEF\xA0\x0D\xF3\x77\x4A\x25\x9F\x2E\x62\xB4\xC5\xD9\x9C\xB5" | ||
156 | "\xAD\xB3\x00\xA0\x28\x5E\x53\x01\x93\x0E\x0C\x70\xFB\x68\x76\x93" | ||
157 | "\x9C\xE6\x16\xCE\x62\x4A\x11\xE0\x08\x6D\x34\x1E\xBC\xAC\xA0\xA1" | ||
158 | "\xF5" | ||
159 | "\x02\x01\x11" /* public key - integer of 1 byte */ | ||
160 | "\x02\x40" /* private key - integer of 64 bytes */ | ||
161 | "\x0A\x03\x37\x48\x62\x64\x87\x69\x5F\x5F\x30\xBC\x38\xB9\x8B\x44" | ||
162 | "\xC2\xCD\x2D\xFF\x43\x40\x98\xCD\x20\xD8\xA1\x38\xD0\x90\xBF\x64" | ||
163 | "\x79\x7C\x3F\xA7\xA2\xCD\xCB\x3C\xD1\xE0\xBD\xBA\x26\x54\xB4\xF9" | ||
164 | "\xDF\x8E\x8A\xE5\x9D\x73\x3D\x9F\x33\xB3\x01\x62\x4A\xFD\x1D\x51", | ||
165 | .m = "\x54\x85\x9b\x34\x2c\x49\xea\x2a", | ||
166 | .c = | ||
167 | "\x63\x1c\xcd\x7b\xe1\x7e\xe4\xde\xc9\xa8\x89\xa1\x74\xcb\x3c\x63" | ||
168 | "\x7d\x24\xec\x83\xc3\x15\xe4\x7f\x73\x05\x34\xd1\xec\x22\xbb\x8a" | ||
169 | "\x5e\x32\x39\x6d\xc1\x1d\x7d\x50\x3b\x9f\x7a\xad\xf0\x2e\x25\x53" | ||
170 | "\x9f\x6e\xbd\x4c\x55\x84\x0c\x9b\xcf\x1a\x4b\x51\x1e\x9e\x0c\x06", | ||
171 | .key_len = 139, | ||
172 | .m_size = 8, | ||
173 | .c_size = 64, | ||
174 | }, { | ||
175 | .key = | ||
176 | "\x30\x82\x01\x0B" /* sequence of 267 bytes */ | ||
177 | "\x02\x81\x81" /* modulus - integer of 129 bytes */ | ||
178 | "\x00\xBB\xF8\x2F\x09\x06\x82\xCE\x9C\x23\x38\xAC\x2B\x9D\xA8\x71" | ||
179 | "\xF7\x36\x8D\x07\xEE\xD4\x10\x43\xA4\x40\xD6\xB6\xF0\x74\x54\xF5" | ||
180 | "\x1F\xB8\xDF\xBA\xAF\x03\x5C\x02\xAB\x61\xEA\x48\xCE\xEB\x6F\xCD" | ||
181 | "\x48\x76\xED\x52\x0D\x60\xE1\xEC\x46\x19\x71\x9D\x8A\x5B\x8B\x80" | ||
182 | "\x7F\xAF\xB8\xE0\xA3\xDF\xC7\x37\x72\x3E\xE6\xB4\xB7\xD9\x3A\x25" | ||
183 | "\x84\xEE\x6A\x64\x9D\x06\x09\x53\x74\x88\x34\xB2\x45\x45\x98\x39" | ||
184 | "\x4E\xE0\xAA\xB1\x2D\x7B\x61\xA5\x1F\x52\x7A\x9A\x41\xF6\xC1\x68" | ||
185 | "\x7F\xE2\x53\x72\x98\xCA\x2A\x8F\x59\x46\xF8\xE5\xFD\x09\x1D\xBD" | ||
186 | "\xCB" | ||
187 | "\x02\x01\x11" /* public key - integer of 1 byte */ | ||
188 | "\x02\x81\x81" /* private key - integer of 129 bytes */ | ||
189 | "\x00\xA5\xDA\xFC\x53\x41\xFA\xF2\x89\xC4\xB9\x88\xDB\x30\xC1\xCD" | ||
190 | "\xF8\x3F\x31\x25\x1E\x06\x68\xB4\x27\x84\x81\x38\x01\x57\x96\x41" | ||
191 | "\xB2\x94\x10\xB3\xC7\x99\x8D\x6B\xC4\x65\x74\x5E\x5C\x39\x26\x69" | ||
192 | "\xD6\x87\x0D\xA2\xC0\x82\xA9\x39\xE3\x7F\xDC\xB8\x2E\xC9\x3E\xDA" | ||
193 | "\xC9\x7F\xF3\xAD\x59\x50\xAC\xCF\xBC\x11\x1C\x76\xF1\xA9\x52\x94" | ||
194 | "\x44\xE5\x6A\xAF\x68\xC5\x6C\x09\x2C\xD3\x8D\xC3\xBE\xF5\xD2\x0A" | ||
195 | "\x93\x99\x26\xED\x4F\x74\xA1\x3E\xDD\xFB\xE1\xA1\xCE\xCC\x48\x94" | ||
196 | "\xAF\x94\x28\xC2\xB7\xB8\x88\x3F\xE4\x46\x3A\x4B\xC8\x5B\x1C\xB3" | ||
197 | "\xC1", | ||
198 | .key_len = 271, | ||
199 | .m = "\x54\x85\x9b\x34\x2c\x49\xea\x2a", | ||
200 | .c = | ||
201 | "\x74\x1b\x55\xac\x47\xb5\x08\x0a\x6e\x2b\x2d\xf7\x94\xb8\x8a\x95" | ||
202 | "\xed\xa3\x6b\xc9\x29\xee\xb2\x2c\x80\xc3\x39\x3b\x8c\x62\x45\x72" | ||
203 | "\xc2\x7f\x74\x81\x91\x68\x44\x48\x5a\xdc\xa0\x7e\xa7\x0b\x05\x7f" | ||
204 | "\x0e\xa0\x6c\xe5\x8f\x19\x4d\xce\x98\x47\x5f\xbd\x5f\xfe\xe5\x34" | ||
205 | "\x59\x89\xaf\xf0\xba\x44\xd7\xf1\x1a\x50\x72\xef\x5e\x4a\xb6\xb7" | ||
206 | "\x54\x34\xd1\xc4\x83\x09\xdf\x0f\x91\x5f\x7d\x91\x70\x2f\xd4\x13" | ||
207 | "\xcc\x5e\xa4\x6c\xc3\x4d\x28\xef\xda\xaf\xec\x14\x92\xfc\xa3\x75" | ||
208 | "\x13\xb4\xc1\xa1\x11\xfc\x40\x2f\x4c\x9d\xdf\x16\x76\x11\x20\x6b", | ||
209 | .m_size = 8, | ||
210 | .c_size = 128, | ||
211 | }, { | ||
212 | #endif | ||
213 | .key = | ||
214 | "\x30\x82\x02\x0D" /* sequence of 525 bytes */ | ||
215 | "\x02\x82\x01\x00" /* modulus - integer of 256 bytes */ | ||
216 | "\xDB\x10\x1A\xC2\xA3\xF1\xDC\xFF\x13\x6B\xED\x44\xDF\xF0\x02\x6D" | ||
217 | "\x13\xC7\x88\xDA\x70\x6B\x54\xF1\xE8\x27\xDC\xC3\x0F\x99\x6A\xFA" | ||
218 | "\xC6\x67\xFF\x1D\x1E\x3C\x1D\xC1\xB5\x5F\x6C\xC0\xB2\x07\x3A\x6D" | ||
219 | "\x41\xE4\x25\x99\xAC\xFC\xD2\x0F\x02\xD3\xD1\x54\x06\x1A\x51\x77" | ||
220 | "\xBD\xB6\xBF\xEA\xA7\x5C\x06\xA9\x5D\x69\x84\x45\xD7\xF5\x05\xBA" | ||
221 | "\x47\xF0\x1B\xD7\x2B\x24\xEC\xCB\x9B\x1B\x10\x8D\x81\xA0\xBE\xB1" | ||
222 | "\x8C\x33\xE4\x36\xB8\x43\xEB\x19\x2A\x81\x8D\xDE\x81\x0A\x99\x48" | ||
223 | "\xB6\xF6\xBC\xCD\x49\x34\x3A\x8F\x26\x94\xE3\x28\x82\x1A\x7C\x8F" | ||
224 | "\x59\x9F\x45\xE8\x5D\x1A\x45\x76\x04\x56\x05\xA1\xD0\x1B\x8C\x77" | ||
225 | "\x6D\xAF\x53\xFA\x71\xE2\x67\xE0\x9A\xFE\x03\xA9\x85\xD2\xC9\xAA" | ||
226 | "\xBA\x2A\xBC\xF4\xA0\x08\xF5\x13\x98\x13\x5D\xF0\xD9\x33\x34\x2A" | ||
227 | "\x61\xC3\x89\x55\xF0\xAE\x1A\x9C\x22\xEE\x19\x05\x8D\x32\xFE\xEC" | ||
228 | "\x9C\x84\xBA\xB7\xF9\x6C\x3A\x4F\x07\xFC\x45\xEB\x12\xE5\x7B\xFD" | ||
229 | "\x55\xE6\x29\x69\xD1\xC2\xE8\xB9\x78\x59\xF6\x79\x10\xC6\x4E\xEB" | ||
230 | "\x6A\x5E\xB9\x9A\xC7\xC4\x5B\x63\xDA\xA3\x3F\x5E\x92\x7A\x81\x5E" | ||
231 | "\xD6\xB0\xE2\x62\x8F\x74\x26\xC2\x0C\xD3\x9A\x17\x47\xE6\x8E\xAB" | ||
232 | "\x02\x03\x01\x00\x01" /* public key - integer of 3 bytes */ | ||
233 | "\x02\x82\x01\x00" /* private key - integer of 256 bytes */ | ||
234 | "\x52\x41\xF4\xDA\x7B\xB7\x59\x55\xCA\xD4\x2F\x0F\x3A\xCB\xA4\x0D" | ||
235 | "\x93\x6C\xCC\x9D\xC1\xB2\xFB\xFD\xAE\x40\x31\xAC\x69\x52\x21\x92" | ||
236 | "\xB3\x27\xDF\xEA\xEE\x2C\x82\xBB\xF7\x40\x32\xD5\x14\xC4\x94\x12" | ||
237 | "\xEC\xB8\x1F\xCA\x59\xE3\xC1\x78\xF3\x85\xD8\x47\xA5\xD7\x02\x1A" | ||
238 | "\x65\x79\x97\x0D\x24\xF4\xF0\x67\x6E\x75\x2D\xBF\x10\x3D\xA8\x7D" | ||
239 | "\xEF\x7F\x60\xE4\xE6\x05\x82\x89\x5D\xDF\xC6\xD2\x6C\x07\x91\x33" | ||
240 | "\x98\x42\xF0\x02\x00\x25\x38\xC5\x85\x69\x8A\x7D\x2F\x95\x6C\x43" | ||
241 | "\x9A\xB8\x81\xE2\xD0\x07\x35\xAA\x05\x41\xC9\x1E\xAF\xE4\x04\x3B" | ||
242 | "\x19\xB8\x73\xA2\xAC\x4B\x1E\x66\x48\xD8\x72\x1F\xAC\xF6\xCB\xBC" | ||
243 | "\x90\x09\xCA\xEC\x0C\xDC\xF9\x2C\xD7\xEB\xAE\xA3\xA4\x47\xD7\x33" | ||
244 | "\x2F\x8A\xCA\xBC\x5E\xF0\x77\xE4\x97\x98\x97\xC7\x10\x91\x7D\x2A" | ||
245 | "\xA6\xFF\x46\x83\x97\xDE\xE9\xE2\x17\x03\x06\x14\xE2\xD7\xB1\x1D" | ||
246 | "\x77\xAF\x51\x27\x5B\x5E\x69\xB8\x81\xE6\x11\xC5\x43\x23\x81\x04" | ||
247 | "\x62\xFF\xE9\x46\xB8\xD8\x44\xDB\xA5\xCC\x31\x54\x34\xCE\x3E\x82" | ||
248 | "\xD6\xBF\x7A\x0B\x64\x21\x6D\x88\x7E\x5B\x45\x12\x1E\x63\x8D\x49" | ||
249 | "\xA7\x1D\xD9\x1E\x06\xCD\xE8\xBA\x2C\x8C\x69\x32\xEA\xBE\x60\x71", | ||
250 | .key_len = 529, | ||
251 | .m = "\x54\x85\x9b\x34\x2c\x49\xea\x2a", | ||
252 | .c = | ||
253 | "\xb2\x97\x76\xb4\xae\x3e\x38\x3c\x7e\x64\x1f\xcc\xa2\x7f\xf6\xbe" | ||
254 | "\xcf\x49\xbc\x48\xd3\x6c\x8f\x0a\x0e\xc1\x73\xbd\x7b\x55\x79\x36" | ||
255 | "\x0e\xa1\x87\x88\xb9\x2c\x90\xa6\x53\x5e\xe9\xef\xc4\xe2\x4d\xdd" | ||
256 | "\xf7\xa6\x69\x82\x3f\x56\xa4\x7b\xfb\x62\xe0\xae\xb8\xd3\x04\xb3" | ||
257 | "\xac\x5a\x15\x2a\xe3\x19\x9b\x03\x9a\x0b\x41\xda\x64\xec\x0a\x69" | ||
258 | "\xfc\xf2\x10\x92\xf3\xc1\xbf\x84\x7f\xfd\x2c\xae\xc8\xb5\xf6\x41" | ||
259 | "\x70\xc5\x47\x03\x8a\xf8\xff\x6f\x3f\xd2\x6f\x09\xb4\x22\xf3\x30" | ||
260 | "\xbe\xa9\x85\xcb\x9c\x8d\xf9\x8f\xeb\x32\x91\xa2\x25\x84\x8f\xf5" | ||
261 | "\xdc\xc7\x06\x9c\x2d\xe5\x11\x2c\x09\x09\x87\x09\xa9\xf6\x33\x73" | ||
262 | "\x90\xf1\x60\xf2\x65\xdd\x30\xa5\x66\xce\x62\x7b\xd0\xf8\x2d\x3d" | ||
263 | "\x19\x82\x77\xe3\x0a\x5f\x75\x2f\x8e\xb1\xe5\xe8\x91\x35\x1b\x3b" | ||
264 | "\x33\xb7\x66\x92\xd1\xf2\x8e\x6f\xe5\x75\x0c\xad\x36\xfb\x4e\xd0" | ||
265 | "\x66\x61\xbd\x49\xfe\xf4\x1a\xa2\x2b\x49\xfe\x03\x4c\x74\x47\x8d" | ||
266 | "\x9a\x66\xb2\x49\x46\x4d\x77\xea\x33\x4d\x6b\x3c\xb4\x49\x4a\xc6" | ||
267 | "\x7d\x3d\xb5\xb9\x56\x41\x15\x67\x0f\x94\x3c\x93\x65\x27\xe0\x21" | ||
268 | "\x5d\x59\xc3\x62\xd5\xa6\xda\x38\x26\x22\x5e\x34\x1c\x94\xaf\x98", | ||
269 | .m_size = 8, | ||
270 | .c_size = 256, | ||
271 | }, { | ||
272 | .key = | ||
273 | "\x30\x82\x01\x09" /* sequence of 265 bytes */ | ||
274 | "\x02\x82\x01\x00" /* modulus - integer of 256 bytes */ | ||
275 | "\xDB\x10\x1A\xC2\xA3\xF1\xDC\xFF\x13\x6B\xED\x44\xDF\xF0\x02\x6D" | ||
276 | "\x13\xC7\x88\xDA\x70\x6B\x54\xF1\xE8\x27\xDC\xC3\x0F\x99\x6A\xFA" | ||
277 | "\xC6\x67\xFF\x1D\x1E\x3C\x1D\xC1\xB5\x5F\x6C\xC0\xB2\x07\x3A\x6D" | ||
278 | "\x41\xE4\x25\x99\xAC\xFC\xD2\x0F\x02\xD3\xD1\x54\x06\x1A\x51\x77" | ||
279 | "\xBD\xB6\xBF\xEA\xA7\x5C\x06\xA9\x5D\x69\x84\x45\xD7\xF5\x05\xBA" | ||
280 | "\x47\xF0\x1B\xD7\x2B\x24\xEC\xCB\x9B\x1B\x10\x8D\x81\xA0\xBE\xB1" | ||
281 | "\x8C\x33\xE4\x36\xB8\x43\xEB\x19\x2A\x81\x8D\xDE\x81\x0A\x99\x48" | ||
282 | "\xB6\xF6\xBC\xCD\x49\x34\x3A\x8F\x26\x94\xE3\x28\x82\x1A\x7C\x8F" | ||
283 | "\x59\x9F\x45\xE8\x5D\x1A\x45\x76\x04\x56\x05\xA1\xD0\x1B\x8C\x77" | ||
284 | "\x6D\xAF\x53\xFA\x71\xE2\x67\xE0\x9A\xFE\x03\xA9\x85\xD2\xC9\xAA" | ||
285 | "\xBA\x2A\xBC\xF4\xA0\x08\xF5\x13\x98\x13\x5D\xF0\xD9\x33\x34\x2A" | ||
286 | "\x61\xC3\x89\x55\xF0\xAE\x1A\x9C\x22\xEE\x19\x05\x8D\x32\xFE\xEC" | ||
287 | "\x9C\x84\xBA\xB7\xF9\x6C\x3A\x4F\x07\xFC\x45\xEB\x12\xE5\x7B\xFD" | ||
288 | "\x55\xE6\x29\x69\xD1\xC2\xE8\xB9\x78\x59\xF6\x79\x10\xC6\x4E\xEB" | ||
289 | "\x6A\x5E\xB9\x9A\xC7\xC4\x5B\x63\xDA\xA3\x3F\x5E\x92\x7A\x81\x5E" | ||
290 | "\xD6\xB0\xE2\x62\x8F\x74\x26\xC2\x0C\xD3\x9A\x17\x47\xE6\x8E\xAB" | ||
291 | "\x02\x03\x01\x00\x01", /* public key - integer of 3 bytes */ | ||
292 | .key_len = 269, | ||
293 | .m = "\x54\x85\x9b\x34\x2c\x49\xea\x2a", | ||
294 | .c = | ||
295 | "\xb2\x97\x76\xb4\xae\x3e\x38\x3c\x7e\x64\x1f\xcc\xa2\x7f\xf6\xbe" | ||
296 | "\xcf\x49\xbc\x48\xd3\x6c\x8f\x0a\x0e\xc1\x73\xbd\x7b\x55\x79\x36" | ||
297 | "\x0e\xa1\x87\x88\xb9\x2c\x90\xa6\x53\x5e\xe9\xef\xc4\xe2\x4d\xdd" | ||
298 | "\xf7\xa6\x69\x82\x3f\x56\xa4\x7b\xfb\x62\xe0\xae\xb8\xd3\x04\xb3" | ||
299 | "\xac\x5a\x15\x2a\xe3\x19\x9b\x03\x9a\x0b\x41\xda\x64\xec\x0a\x69" | ||
300 | "\xfc\xf2\x10\x92\xf3\xc1\xbf\x84\x7f\xfd\x2c\xae\xc8\xb5\xf6\x41" | ||
301 | "\x70\xc5\x47\x03\x8a\xf8\xff\x6f\x3f\xd2\x6f\x09\xb4\x22\xf3\x30" | ||
302 | "\xbe\xa9\x85\xcb\x9c\x8d\xf9\x8f\xeb\x32\x91\xa2\x25\x84\x8f\xf5" | ||
303 | "\xdc\xc7\x06\x9c\x2d\xe5\x11\x2c\x09\x09\x87\x09\xa9\xf6\x33\x73" | ||
304 | "\x90\xf1\x60\xf2\x65\xdd\x30\xa5\x66\xce\x62\x7b\xd0\xf8\x2d\x3d" | ||
305 | "\x19\x82\x77\xe3\x0a\x5f\x75\x2f\x8e\xb1\xe5\xe8\x91\x35\x1b\x3b" | ||
306 | "\x33\xb7\x66\x92\xd1\xf2\x8e\x6f\xe5\x75\x0c\xad\x36\xfb\x4e\xd0" | ||
307 | "\x66\x61\xbd\x49\xfe\xf4\x1a\xa2\x2b\x49\xfe\x03\x4c\x74\x47\x8d" | ||
308 | "\x9a\x66\xb2\x49\x46\x4d\x77\xea\x33\x4d\x6b\x3c\xb4\x49\x4a\xc6" | ||
309 | "\x7d\x3d\xb5\xb9\x56\x41\x15\x67\x0f\x94\x3c\x93\x65\x27\xe0\x21" | ||
310 | "\x5d\x59\xc3\x62\xd5\xa6\xda\x38\x26\x22\x5e\x34\x1c\x94\xaf\x98", | ||
311 | .m_size = 8, | ||
312 | .c_size = 256, | ||
313 | .public_key_vec = true, | ||
314 | } | ||
315 | }; | ||
316 | |||
317 | /* | ||
131 | * MD4 test vectors from RFC1320 | 318 | * MD4 test vectors from RFC1320 |
132 | */ | 319 | */ |
133 | #define MD4_TEST_VECTORS 7 | 320 | #define MD4_TEST_VECTORS 7 |