Skip to content

NickBrighten/NBSCrypto

Repository files navigation

NBSCrypto

NBSCrypto is an ultra lightweight crytopgraphy framework for iOS, iPadOS, macOS, tvOS and watchOS.

This repository include the whole Xcode project with all targets, ready to build (Build-Number: 260623)
NSCrypto is written in Objective-C and C.

It is possible to use the .framework or .xcframework in both Objective-C and Swift.
To integrate the .framework or .xcframework into an Objective-C project, you can use our guide: Integrate NBSCrypto to an Objective-C Project and to integrate it into a Swift project, you can use our guide: Integrate NBSCrypto to an Swift Project.

Precompiled Builds (Build-Number: 260613) will be available as multiple tagets .xcframework for production/deployment and simulators here.

An XCFramework .xcframework is Apple's recommended, modern format for distributing compiled binary code and frameworks. It allows developers to bundle libraries supporting multiple platforms, such as iOS, iPadOS, macOS, tvOS, visionOS and watchOS, into a single, unified package that works on both physical devices and simulators.

If you wish to use this source code for your own library (and for platforms other than Apple devices), you can start with the src folder and extend and optimize the code.

Test vectors for ciphers and hashes are being gradually added and updated.

Table of Content

Collaboration

Feel free and collaborate with us and others to bring up this repository.
Please keep in mind a few important things to ensure smooth collaboration.

Branches

Caution

Please be aware, that all branches besides main can and will be force-pushed, rebased and/or removed!

If you want to rely on such an unstable branch, create your own fork of this repository to make sure nothing breaks for you.

Submitting Patches & Reviews

Important

Please branch off from dev if you want to submit a patch.
Patch integration will be faster if tests and documentation are included.

We're using Pull Request reviews to make sure that the code is in line with the existing code base.
Please have a look here to get an idea of the approach.

Supported Cipher-Algorithms

  • AES / RIJNDAEL
    • BIT-LENGTH: 128 192 256
    • MODES: CBC CCM CFB CTR EAX ECB F8 GCM LRW OCB OCB3 OFB XTS
  • ANUBIS / ANUBIS-TWEAK
    • BIT-LENGTH: 128 160 192 224 256 288 320
    • MODES: CBC CCM CFB CTR EAX ECB F8 GCM LRW OCB OCB3 OFB XTS
  • ARIA
    • BIT-LENGTH: 128 192 256
    • MODES: CBC CCM CFB CTR EAX ECB F8 GCM LRW OCB OCB3 OFB XTS
  • BLOWFISH
    • BIT-LENGTH: 128 up to 576
    • MODES: CBC CFB CTR EAX ECB F8 OCB OFB
  • CAMELLIA
    • BIT-LENGTH: 128 192 256
    • MODES: CBC CCM CFB CTR EAX ECB F8 GCM LRW OCB OCB3 OFB XTS
  • CAST-5
    • BIT-LENGTH: 128
    • MODES: CBC CFB CTR EAX ECB F8 OCB OFB
  • CAST-6
    • BIT-LENGTH: 128 160 192 224 256
    • MODES: CBC CCM CFB CTR EAX ECB F8 GCM LRW OCB OCB3 OFB XTS
  • CHACHA8
    • BIT-LENGTH: 128 256
    • MODES: CHACHA8POLY1305
  • CHACHA12
    • BIT-LENGTH: 128 256
    • MODES: CHACHA12POLY1305
  • CHACHA20
    • BIT-LENGTH: 128 256
    • MODES: CHACHA20POLY1305
  • DES
    • BIT-LENGTH: 64
    • MODES: CBC CFB CTR EAX ECB F8 OCB OFB
  • DES-EDE / DES-EDE2
    • BIT-LENGTH: 128
    • MODES: CBC CFB CTR EAX ECB F8 OCB OFB
  • DES3 / DES-EDE3
    • BIT-LENGTH: 192
    • MODES: CBC CFB CTR EAX ECB F8 OCB OFB
  • IDEA
    • BIT-LENGTH: 128
    • MODES: CBC CFB CTR EAX ECB F8 OCB OFB
  • KASUMI / A5-3
    • BIT-LENGTH: 128
    • MODES: CBC CFB CTR EAX ECB F8 OCB OFB
  • KHAZAD
    • BIT-LENGTH: 128
    • MODES: CBC CFB CTR EAX ECB F8 OCB OFB
  • LEA
    • BIT-LENGTH: 128 192 256
    • MODES: CBC CCM CFB CTR EAX ECB F8 GCM LRW OCB OCB3 OFB XTS
  • MARS
    • BIT-LENGTH: 128 160 192 224 256 288 320 352 384 416 448
    • MODES: CBC CCM CFB CTR EAX ECB F8 GCM LRW OCB OCB3 OFB XTS
  • NOEKEON
    • BIT-LENGTH: 128
    • MODES: CBC CCM CFB CTR EAX ECB F8 GCM LRW OCB OCB3 OFB XTS
  • PRESENT
    • BIT-LENGTH: 80 128
    • MODES: CBC CFB CTR EAX ECB F8 OCB OFB
  • RC2
    • BIT-LENGTH: 1024
    • MODES: CBC CFB CTR EAX ECB F8 OCB OFB
  • RC4
    • BIT-LENGTH: 2048
    • MODES: none
  • RC6
    • BIT-LENGTH: 256
    • MODES: CBC CCM CFB CTR EAX ECB F8 GCM LRW OCB OCB3 OFB XTS
  • SAFER-K64 / SAFER-SK64
    • BIT-LENGTH: 64
    • MODES: CBC CFB CTR EAX ECB F8 OCB OFB
  • SAFER-K128 / SAFER-SK128
    • BIT-LENGTH: 128
    • MODES: CBC CFB CTR EAX ECB F8 OCB OFB
  • SAFER+
    • BIT-LENGTH: 128 192 256
    • MODES: CBC CCM CFB CTR EAX ECB F8 GCM LRW OCB OCB3 OFB XTS
  • SEED
    • BIT-LENGTH: 128
    • MODES: CBC CCM CFB CTR EAX ECB F8 GCM LRW OCB OCB3 OFB XTS
  • SERPENT
    • BIT-LENGTH: 128 192 256
    • MODES: CBC CCM CFB CTR EAX ECB F8 GCM LRW OCB OCB3 OFB XTS
  • SKIPJACK
    • BIT-LENGTH: 128
    • MODES: CBC CFB CTR EAX ECB F8 OCB OFB
  • SM4
    • BIT-LENGTH: 128
    • MODES: CBC CCM CFB CTR EAX ECB F8 GCM LRW OCB OCB3 OFB XTS
  • TEA
    • BIT-LENGTH: 128
    • MODES: CBC CFB CTR EAX ECB F8 OCB OFB
  • TWOFISH
    • BIT-LENGTH: 128 192 256
    • MODES: CBC CCM CFB CTR EAX ECB F8 GCM LRW OCB OCB3 OFB XTS
  • XTEA
    • BIT-LENGTH: 128
    • MODES: CBC CFB CTR EAX ECB F8 OCB OFB

#Syntax for Hash Objective-C

[NBSCryptoHash hashString:@"0123456789abcdef"
            withAlgorithm:NBSCrypto_HASH_SHA3_512];
//return NSString
[NBSCryptoHash hashString:@"0123456789abcdef"
            withAlgorithm:NBSCrypto_HASH_SHAKE_256
                   useMAC:NBSCrypto_MAC_POLY1305
             setKeyForMAC:@"0123456789abcdef0123456789abcdef"];
//return NSString
NBSCryptoHash *hash = [[NBSCryptoHash alloc] init];
[hash setAlgorithm:NBSCrypto_HASH_LUFFA_224];
[hash hashString:@"0123456789abcdef"];
//return NSString
NSLog("OUTPUT HASH: %@", hash);
NBSCryptoHash *MAChash = [[NBSCryptoHash alloc] init];
[MAChash setAlgorithm:NBSCrypto_HASH_GROESTL_512];
[MAChash useMAC:NBSCrypto_MAC_HMAC];
[MAChash setKeyForMAC:@"0123456789abcdef0123456789abcdef"];
//return NSString
NSLog("OUTPUT MAC: %@", MAChash);

Swift

let hash = NBSCryptoHash.hashString("0123456789abcdef", withAlgorithm:NBSCrypto_HASH_BLUEMIDNIGHTWISH_512);
//return NSString
NSLog("OUTPUT HASH: %@", hash);
let MAChash = NBSCryptoHash.hashString("0123456789abcdef", withAlgorithm:NBSCrypto_HASH_BLUEMIDNIGHTWISH_512, use:NBSCrypto_MAC_HMAC, setKeyForMAC:"0123456789abcdef0123456789abcdef");
//return NSString
NSLog("OUTPUT MAC: %@", MAChash);

Supported Hash-Algorithms

  • ADLER32
    • BIT-LENGTH: 32
  • ARIRANG
    • BIT-LENGTH: 224 256 384 512
  • BLAKE2B
    • BIT-LENGTH: 160 256 384 512
  • BLAKE2S
    • BIT-LENGTH: 128 160 224 256
  • BLAKE3
    • BIT-LENGTH: 256
  • BLUEMIDNIGHTWISH
    • BIT-LENGTH: 224 256 384 512
  • CHI
    • BIT-LENGTH: 224 256 384 512
  • CRC-8
    • BIT-LENGTH: 8
    • VARIATIONS: AES AUTOSAR BLUETOOTH CCITT CDMA2000 DARC DVB-S2 EBU GSM-A GSM-B HITAG I-432-1 ICODE ITU LTE MAXIM MAXIM-DOWN MIFARE-MAD NRSC-5 OPENSEAFTY ROHC SAE-J1850 SMBUS TECH-3250 WCDMA
  • CRC-16
    • BIT-LENGTH: 16
    • VARIATIONS: ACORN ARC AUG-CCITT AUTOSAR BLUETOOTH BUYPASS CCITT CCITT-FALSE CCITT-TRUE CDMA2000 CMS DARC DDS110 DECT-R DECT-X DNP EN-13757 EPC EPC-C1G2 GENIBUS GSM IBM IBM-3740 IBM-SDLC ICODE IEC-61158-2 ISO-HDLC ISO-IEC-14443-3-A ISO-IEC-14443-3-B KERMIT LHA LJ1200 LTE M17 MAXIM MAXIM-DOWN MCRF4XX MODBUS NRSC-5 OPENSEAFTY-A OPENSEAFTY-B PROFIBUS RIELLO SPI-FUJITSU T10-DIF TELEDISK TMS37157 UMTS USB V41LSB V41MSB VERIFONE X-25 XMODEM ZMODEM
  • CRC-24
    • BIT-LENGTH: 24
    • VARIATIONS: BLE FLEXRAY-A FLEXRAY-B INTERLAKEN LTE-A LTE-B OPENPGP OS-9 RADIX-64 RTCM-104V3 WDCMA
  • CRC-32
    • BIT-LENGTH: 32
    • VARIATIONS: AAL5 ADCCP AIXM AUTOSAR B BASE91-C BASE91-D BZIP2 C CASTAGNOLI CD-ROM-EDC CKSUM D DECT-B IEEE-802-3 INTERLAKEN ISCSI ISO-HDLC JAMCRC MEF MPEG2 NVME POSIX Q V42 XFER XZ
  • CRC-64
    • BIT-LENGTH: 64
    • VARIATIONS: ECMA-182 GO-ECMA GO-ISO ISO-3309 MS NVME REDIS WE XZ
  • ECHO
    • BIT-LENGTH: 224 256 384 512
  • FNV1-32 / FNV1a-32
    • BIT-LENGTH: 32
  • FNV1-64 / FNV1a-64
    • BIT-LENGTH: 64
  • FUGUE
    • BIT-LENGTH: 224 256 384 512
  • GOST / GOST-CRYPTO
    • BIT-LENGTH: 256
  • GROESTL
    • BIT-LENGTH: 224 256 384 512
  • HAMSI
    • BIT-LENGTH: 224 256 384 512
  • HAVAL-3 / HAVAL-4 / HAVAL-5
    • BIT-LENGTH: 128 160 192 224 256
  • JH
    • BIT-LENGTH: 224 256 384 512
  • JOAAT
    • BIT-LENGTH: 32
  • KECCAK
    • BIT-LENGTH: 224 256 384 512
  • KUPYNA
    • BIT-LENGTH: 256 512
  • LANE
    • BIT-LENGTH: 224 256 384 512
  • LESAMNTA
    • BIT-LENGTH: 224 256 384 512
  • LUFFA
    • BIT-LENGTH: 224 256 384 512
  • MD2 / MD4 / MD5
    • BIT-LENGTH: 128
  • MD6
    • BIT-LENGTH: 128 160 192 224 256 384 512
  • MURMUR3A
    • BIT-LENGTH: 32
  • MURMUR3C / MURMUR3F
    • BIT-LENGTH: 128
  • RIPEMD
    • BIT-LENGTH: 128 160 256 320
  • SHA-1
    • BIT-LENGTH: 160
  • SHA-2
    • BIT-LENGTH: 224 256 384 512
  • SHA-3
    • BIT-LENGTH: 224 256 384 512
  • SHABAL
    • BIT-LENGTH: 192 224 256 384 512
  • SHAKE
    • BIT-LENGTH: 128 256
  • SHAVITE3
    • BIT-LENGTH: 224 256 384 512
  • SIMD
    • BIT-LENGTH: 224 256 384 512
  • SM3
    • BIT-LENGTH: 256
  • SNEFRU
    • BIT-LENGTH: 256
  • STREEBOG / GOST-R34112012
    • BIT-LENGTH: 256 512
  • SWIFFTX
    • BIT-LENGTH: 224 256 384 512
  • TIGER / TIGER-2
    • BIT-LENGTH: 128 160 192
  • WHIRPOOL
    • BIT-LENGTH: 512
  • XXH
    • BIT-LENGTH: 32 64 128

Supported MAC-Algorithms

  • F9
    • cipher
  • HMAC
    • hash
  • OMAC
    • cipher
  • PELICAN
    • hash
  • PMAC
    • cipher
  • POLY1305
    • hash