Latest 1.1.0
License MIT
Platforms osx 10.8, requires ARC

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)


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";

Latest podspec

    "name": "NACrypto",
    "version": "1.1.0",
    "summary": "HMAC, Digest, AES, Twofish, SHA1, SHA2, SHA3, Keccak",
    "homepage": "",
    "license": {
        "type": "MIT"
    "authors": {
        "Gabriel Handford": "[email protected]"
    "source": {
        "git": "",
        "tag": "1.1.0"
    "requires_arc": true,
    "platforms": {
        "osx": "10.8"
    "ios": {
        "source_files": "NACrypto/**/*.{c,h,m}"
    "osx": {
        "source_files": "NACrypto/**/*.{c,h,m}"

Pin It on Pinterest

Share This