114 lines
8.6 KiB
Java
114 lines
8.6 KiB
Java
/* RsaFipsTest.java
|
|
*
|
|
* Copyright (C) 2006-2015 wolfSSL Inc.
|
|
*
|
|
* This file is part of wolfSSL. (formerly known as CyaSSL)
|
|
*
|
|
* wolfSSL is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* wolfSSL is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
|
*/
|
|
|
|
package com.wolfssl.wolfcrypt.fips;
|
|
|
|
import static org.junit.Assert.*;
|
|
|
|
import java.nio.ByteBuffer;
|
|
|
|
import org.junit.Test;
|
|
|
|
import com.wolfssl.wolfcrypt.Asn;
|
|
import com.wolfssl.wolfcrypt.Rsa;
|
|
import com.wolfssl.wolfcrypt.Sha256;
|
|
import com.wolfssl.wolfcrypt.Util;
|
|
import com.wolfssl.wolfcrypt.WolfCrypt;
|
|
import com.wolfssl.wolfcrypt.Fips;
|
|
|
|
public class RsaFipsTest {
|
|
private ByteBuffer n = ByteBuffer
|
|
.allocateDirect(WolfCrypt.SIZE_OF_2048_BITS);
|
|
private ByteBuffer e = ByteBuffer
|
|
.allocateDirect(WolfCrypt.SIZE_OF_2048_BITS);
|
|
private ByteBuffer message = ByteBuffer
|
|
.allocateDirect(WolfCrypt.SIZE_OF_1024_BITS);
|
|
private ByteBuffer signature = ByteBuffer
|
|
.allocateDirect(WolfCrypt.SIZE_OF_2048_BITS);
|
|
private ByteBuffer hash = ByteBuffer.allocateDirect(Sha256.DIGEST_SIZE);
|
|
private ByteBuffer encoded = ByteBuffer
|
|
.allocateDirect(Asn.MAX_ENCODED_SIG_SIZE);
|
|
private ByteBuffer result = ByteBuffer
|
|
.allocateDirect(Asn.MAX_ENCODED_SIG_SIZE);
|
|
|
|
@Test
|
|
public void initShouldReturnZero() {
|
|
Rsa key = new Rsa();
|
|
|
|
assertEquals(WolfCrypt.SUCCESS, Fips.InitRsaKey_fips(key, null));
|
|
assertEquals(WolfCrypt.SUCCESS, Fips.FreeRsaKey_fips(key));
|
|
}
|
|
|
|
@Test
|
|
public void VerifyShouldMatch() {
|
|
String[] modulus = new String[] {
|
|
"aff5f9e2e2622320d44dbf54f2274a0f96fa7d70a63ddaa563f4881143112bb3c36fe65ba0c9ad99d6fb6e53cb08e3938ee415b3a8cb7f9602f2154fab83dd160fa6f509ba2c41295af9eea8787d333e961461447fc60b3c61616ef5b94e822114e6fad44d1f2c476bc23bc03609e2e70a483d826409fdb7c50a91269a773976ef137e7fa477c3951e8fbcb48f2378aa5e430e8c60b481beeb63df9abe10c7ccf266e394fbd925e8725e4675fb6ad895caed4b31d751c8712533e1c42ebefe9166e1aa20631521858c7548c61626ede105f2812632bac96eb769c9be560beef4200b86409727a5a61d1cc5831785ba4d42f02dd298a56bbbd6c479ce724d5bb5",
|
|
"aa9100d03c11b45942ada8e3b23912bc1350522e970f0d0e3bbf63f11c69c6de8d815f02a2c16c7cbe9bf85f6df59ede3f495274b23331a71e8e8ac8b2b877b64ffeda0ffa0f28b71f4fcf35454eeb8afa3f2033e0c5c0a88c647cc9f95f072837d243f46cf37dbf5c8a871daf2b28c66615a53733b1a04cf9f5356cdf7b549971bc978bfdd0e5b383ade039978f9ecf2d2949391ce386acddd0a5d009b6e7cd79af069d8ec123217adf541ca7f6d6dd67180b94f34b985501a169ace495e6eb2ae1955556de5e589307f9f6d53bcc82ff67eb0cab511490903cf1ec8fd00242400a02335542073f7c074b5ef8907ef460b065b8c2a404fed15ba84cd9f8103b",
|
|
"a40bf41a33f394ef10efc0e1f26a7c20f8929b43c4cfa4c8718152af3418d2494e1f88173608bc6c6d8946e79a0e3732f5aee128ea29e86f71d56b25971068d8b87b567cd71f426788936560977e9492b66b522854b44206107152b1b498b21fd8e1f02b8c9f6a063e8fb9967bd22c3706f2d68613c0ed6cd5524460210ffc4a4d18b88b7c03ce5315e66833ad1f6868d8851613ff635811a119917bc5c84e6b94659f3ef3b972d3d18c26be6d57ce9a2f5260fa6860dbca9f7f61ab9b2f998abea8c495e314f5fa1d13d0a31e175d21f7d84ab879a31a4b66f77f589e267890af0b5e625e68c6525461e60d2a70febdcfcb2d7870370f5bac926581a262069f", };
|
|
String[] exponent = new String[] {
|
|
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d0ee61",
|
|
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e92e95",
|
|
"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004fa87f", };
|
|
String[] messages = new String[] {
|
|
"e6fd961dc2977a9c08be5c31d8de89450945a53d79299ea2a1edde7f6da0c50b4ac75688805c306bc216c0bd03ebb6c18cd4b5d74cd04fa06f2b3063320099b0f5fd11439166572aed5c9a2bcc60ec60e913f524463fe433c11bab0ce8cb6c9a0e272e149fbdd522b0195141da441568498acbec108046a1bf46b842380a2512",
|
|
"e9ebe4ea39974ea1730cc4072d5c9d649facf7adfa3baca8fba18251bf55a27dd9724cbda2bbc885d0dca08d4af30c783b4eaeb465767fa1b96d0af52435d85fab912b6aba10efa5b946ed01e15d427a4ecd0ff9556773791798b66956ecc75288d1e9ba2a9ea94857d3132999a225b1ffaf844670156e7a3ea9f077fe8259a0",
|
|
"b486fb4b03d8912cb4019db651ba040612a6f26b9932296cdfc1990c6f06314cd2b0f6f24a4d5289c368aea906f5437830f02c716240c064bbe120be83420c0ba9ecfbb970656a1f655474be94e5a3c6fb6f06dc3f55831a9e2a6f5725185ca923823229dde882f6830b167d6352cdf75d6da63297381a9572e2af5fbc4eca2f", };
|
|
String[] signatures = new String[] {
|
|
"22616f85fe79f912d6038613dca4a1500fda73272782843c5d95de1b02325f57f65bb3b2f07e38986afab6864de1f2ae5ae57a609513a4d642c3d656b6830c226be3967dcb65d7f9c4ca9d113ceede7a418eaf0a1e8b68454c38561a448a07cbebefd77c14117bfca6fa67d7b2872b92a35d628ccdba7d8069af8ea1602e9ad1ae4939a9e8292f587fda580d023747c2a11d023d9dde963a99bedef8bbe26b1de43a58ca5bcfc6045bb7d427b132b8540280c5941c8dba59a61afbfdffd8872ecbc57fe281a577648f0764b3a579e38c7ba33bb88e25c60096d5fd7d33fa82bcc87c69a56c34440a0c0917da75c2d4e7b7abea67b74d35cd101ff41d83e3ad3e",
|
|
"479501e1d5e5320ce739266ee5b8789773fae310abac6acb312184af13884fce6f3771ce5c5d649320d62d35ac0de49f85b278a164948a8c9b733ab10779f9ae929e227d5d80915b1c49018e72498b551ae7321f3f959f458bac36c8e06ce0273ec74552f2dc9b26b7a7094ea7fe880f6af8a0b205a44dd7cc67d08d8bb4f500e22f1634d4330c1e7c0b27b1dcde1853c743c90de1b3b196d420b45368d06071cb2dba1e8316b9ca21bd9ba18d4f3ee753fb66b5c8517226aee9d0d12fa7d59600078db95b16ac9f74ad41660d93d0f18391a35fe81e4a2b6be37b382c3be622db2a1f4c3bf165ae5f6783699410a9be019546f98b5239de00863d43ec54896d",
|
|
"03ff375c15fd574a7a708974ab7b26a8ee97527fb3b558313d036313d57f13bfe591367ca0b623a01dc72295e34b737e5a4034024d440dda66fc8288f3ef0e92a8bf95949ef2b95e4ed937c79bfbd865c7f0d69d3eee64281945f10a1f1fceed9372dc85b4ae33252aad7935cb73ab486211bb55366d68a8808ec92c2b06e35fe0e7e85f93d853a997ea9eca825e88ef6849c2e03c16c72f0f41e5d2820e8e2c686dd9c11fb59d6b0d93d350691a7ae0eb12115148279a7903d8d8c0ca4396c66c8dda41abb458b61064ad05672164a68c9d7c8e0323155a58cd6566430645dea7737e1ee8b5edc378df6b62e308bd531205f4c03715015e4043419a687c702e", };
|
|
|
|
for (int i = 0; i < messages.length; i++) {
|
|
Rsa key = new Rsa();
|
|
|
|
n.put(Util.h2b(modulus[i])).rewind();
|
|
e.put(Util.h2b(exponent[i])).rewind();
|
|
message.put(Util.h2b(messages[i])).rewind();
|
|
signature.put(Util.h2b(signatures[i])).rewind();
|
|
|
|
assertEquals(WolfCrypt.SUCCESS, Fips.InitRsaKey_fips(key, null));
|
|
key.decodeRawPublicKey(n, n.limit(), e, e.limit());
|
|
|
|
Sha256 sha = new Sha256();
|
|
|
|
assertEquals(WolfCrypt.SUCCESS, Fips.InitSha256_fips(sha));
|
|
assertEquals(WolfCrypt.SUCCESS,
|
|
Fips.Sha256Update_fips(sha, message, message.limit()));
|
|
assertEquals(WolfCrypt.SUCCESS, Fips.Sha256Final_fips(sha, hash));
|
|
|
|
encoded.limit(Asn.MAX_ENCODED_SIG_SIZE);
|
|
result.limit(Asn.MAX_ENCODED_SIG_SIZE);
|
|
|
|
Asn.encodeSignature(encoded, hash, Sha256.DIGEST_SIZE,
|
|
Asn.getCTC_HashOID(Sha256.TYPE));
|
|
|
|
assertEquals(encoded.limit(), Fips.RsaSSL_Verify_fips(signature,
|
|
signature.limit(), result, result.limit(), key));
|
|
|
|
result.limit(encoded.limit());
|
|
|
|
assertEquals(encoded, result);
|
|
|
|
assertEquals(WolfCrypt.SUCCESS, Fips.FreeRsaKey_fips(key));
|
|
}
|
|
}
|
|
}
|