NACrypto 1.1.0

NACrypto 1.1.0

TestsTested
LangLanguage CC
License MIT
ReleasedLast Release Mar 2017

Maintained by Gabriel Handford.


Downloads

Total2,735
Week0
Month0

Installs

Apps106
Test Targets7
powered by Segment

GitHub

Stars1
Watchers1
Forks1
Issues0
Contributors1
Pull Requests1

Code

Files43
LOCLines of Code 5,192


NACrypto 1.1.0

  • By
  • Gabriel Handford

You should be using NAChloride (libsodium/NaCl) instead. This is for advanced crypto only.

The following use Apple's CommonCrypto framework:

  • HMAC: SHA1, SHA2
  • Digest: SHA2
  • AES (256-CTR)

The following are implemented from included reference C libraries:

  • HMAC: SHA3, Keccak
  • Digest: SHA3, Keccak
  • TwoFish (CTR)

Podfile

pod "NACrypto"

HMAC (SHA1, SHA2, SHA3, Keccak)

NSData *mac1 = [NAHMAC HMACForKey:key data:data algorithm:NAHMACAlgorithmSHA2_512];
NSData *mac2 = [NAHMAC HMACForKey:key data:data algorithm:NAHMACAlgorithmSHA3F_512];

AES (256-CTR)

// Nonce should be 16 bytes
// Key should be 32 bytes
NAAES *AES = [[NAAES alloc] initWithAlgorithm:NAAESAlgorithm256CTR];
NSData *encrypted = [AES encrypt:message nonce:nonce key:key error:&error];

TwoFish (CTR)

// Nonce should be 16 bytes
// Key should be 32 bytes
NATwoFish *twoFish = [[NATwoFish alloc] init];
NSData *encrypted = [twoFish encrypt:message nonce:nonce key:key error:&error];

Digest (SHA2, SHA3, Keccak)

NSData *digest1 = [NADigest digestForData:data algorithm:NADigestAlgorithmSHA2_256];
NSData *digest2 = [NADigest digestForData:data algorithm:NADigestAlgorithmSHA3F_512];

// Directly use Keccak
NSData *sha = [NAKeccak SHA3ForData:data digestBitLength:512];

Keychain Utils

NSData *key = [NASecRandom randomData:32 error:&error];
[NAKeychain addSymmetricKey:key applicationLabel:@"NACrypto" tag:nil label:nil];
NSData *keyOut = [NAKeychain symmetricKeyWithApplicationLabel:@"NACrypto"];

NSData Utils

NSData *data = [@"deadbeef" na_dataFromHexString];
[data na_hexString]; // @"deadbeef";