Java源码示例:org.abstractj.kalium.NaCl
示例1
@Test
public void testPWHashStorage(){
String result = password.hash(PWHASH_MESSAGE.getBytes(),
HEX,
NaCl.Sodium.CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE,
NaCl.Sodium.CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE);
byte[] hashed = HEX.decode(result);
// Must return true
boolean verified1 = password.verify(hashed, PWHASH_MESSAGE.getBytes());
assertTrue("Invalid password", verified1);
// Must return false since it's an invalid
boolean verified2 = password.verify(hashed, ("i" + PWHASH_MESSAGE).getBytes());
assertTrue("Valid password", !verified2);
}
示例2
@Test
public void testAES256GCM() throws Exception {
sodium().sodium_init();
if (sodium().crypto_aead_aes256gcm_is_available() != 1) {
System.out.println("AES256-GCM is not supported");
return;
}
byte[] key = HEX.decode(AEAD_KEY);
byte[] publicNonce = new Random().randomBytes(NaCl.Sodium.CRYPTO_AEAD_AES256GCM_NPUBBYTES);
byte[] message = HEX.decode(AEAD_MESSAGE);
byte[] ad = HEX.decode(AEAD_AD);
Aead aead = new Aead(key).useAesGcm();
byte[] ct = aead.encrypt(publicNonce, message, ad);
byte[] msg2 = aead.decrypt(publicNonce, ct, ad);
assertArrayEquals(message, msg2);
}
示例3
public Kalium(final NaCl.Sodium sodium) {
this.sodium = Objects.requireNonNull(sodium, "Kalium sodium implementation was null");
LOGGER.info("Initialising Sodium...");
this.sodium.sodium_init();
LOGGER.info("Sodium initialised");
}
示例4
@Override
public Encryptor create(Map<String, String> properties) {
LOGGER.debug("Creating a Kalium implementation of NaclFacadeFactory");
final NaCl.Sodium sodium = NaCl.sodium();
return new Kalium(sodium);
}
示例5
@Before
public void init() {
final NaCl.Sodium sodium = NaCl.sodium();
this.kalium = new Kalium(sodium);
this.keypairOne = kalium.generateNewKeys();
this.keypairTwo = kalium.generateNewKeys();
}
示例6
@Test
public void sodiumIsInitialisedOnStartup() {
final NaCl.Sodium sodium = mock(NaCl.Sodium.class);
// FIXME Is this being used?
final Kalium kalium = new Kalium(sodium);
verify(sodium).sodium_init();
}
示例7
public Box(byte[] publicKey, byte[] privateKey) {
checkLength(publicKey, CRYPTO_BOX_CURVE25519XSALSA20POLY1305_PUBLICKEYBYTES);
checkLength(privateKey, CRYPTO_BOX_CURVE25519XSALSA20POLY1305_SECRETKEYBYTES);
sharedKey = new byte[NaCl.Sodium.CRYPTO_BOX_CURVE25519XSALSA20POLY1305_BEFORENMBYTES];
isValid(sodium().crypto_box_curve25519xsalsa20poly1305_beforenm(
sharedKey, publicKey, privateKey), "Key agreement failed");
}
示例8
@Test
public void testPWHash(){
String result = password.hash(PWHASH_MESSAGE.getBytes(),
HEX,
PWHASH_SALT.getBytes(),
NaCl.Sodium.CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE,
NaCl.Sodium.CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE);
assertEquals("Hash is invalid", PWHASH_DIGEST, result);
}
示例9
@Test
public void testPWHashEmptyString(){
String result = password.hash("".getBytes(),
HEX,
PWHASH_SALT.getBytes(),
NaCl.Sodium.CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE,
NaCl.Sodium.CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE);
assertEquals("Hash is invalid", PWHASH_DIGEST_EMPTY_STRING, result);
}
示例10
@Test
public void testPWHashNullByte() {
try {
password.hash("\0".getBytes(),
HEX,
PWHASH_SALT.getBytes(),
NaCl.Sodium.CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE,
NaCl.Sodium.CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE);
} catch (Exception e) {
fail("Should not raise any exception on null byte");
}
}
示例11
@Test
public void testPWHashKeyDerivation() {
String result = password.hash(NaCl.Sodium.CRYPTO_SECRETBOX_XSALSA20POLY1305_KEYBYTES,
PWHASH_MESSAGE.getBytes(),
HEX,
PWHASH_SALT.getBytes(),
NaCl.Sodium.CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE,
NaCl.Sodium.CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE);
byte[] hashed = HEX.decode(result);
// Must receive expected size
assertEquals(NaCl.Sodium.CRYPTO_SECRETBOX_XSALSA20POLY1305_KEYBYTES, hashed.length);
}
示例12
@Test
public void testPWHashKeyDerivationBytes() {
byte[] key = password.deriveKey(NaCl.Sodium.CRYPTO_SECRETBOX_XSALSA20POLY1305_KEYBYTES,
PWHASH_MESSAGE.getBytes(),
PWHASH_SALT.getBytes(),
NaCl.Sodium.CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE,
NaCl.Sodium.CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE);
// Must receive expected size
assertEquals(NaCl.Sodium.CRYPTO_SECRETBOX_XSALSA20POLY1305_KEYBYTES, key.length);
}
示例13
@Before
public void init() {
this.sodium = mock(NaCl.Sodium.class);
this.kalium = new Kalium(this.sodium);
}