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.
- Collaboration
- Supported Cipher-Algorithms
- Syntax for Hash
- Supported Hash-Algorithms
- Supported MAC-Algorithms
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.
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.
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.
- AES / RIJNDAEL
- BIT-LENGTH:
128192256 - MODES:
CBCCCMCFBCTREAXECBF8GCMLRWOCBOCB3OFBXTS
- BIT-LENGTH:
- ANUBIS / ANUBIS-TWEAK
- BIT-LENGTH:
128160192224256288320 - MODES:
CBCCCMCFBCTREAXECBF8GCMLRWOCBOCB3OFBXTS
- BIT-LENGTH:
- ARIA
- BIT-LENGTH:
128192256 - MODES:
CBCCCMCFBCTREAXECBF8GCMLRWOCBOCB3OFBXTS
- BIT-LENGTH:
- BLOWFISH
- BIT-LENGTH:
128up to576 - MODES:
CBCCFBCTREAXECBF8OCBOFB
- BIT-LENGTH:
- CAMELLIA
- BIT-LENGTH:
128192256 - MODES:
CBCCCMCFBCTREAXECBF8GCMLRWOCBOCB3OFBXTS
- BIT-LENGTH:
- CAST-5
- BIT-LENGTH:
128 - MODES:
CBCCFBCTREAXECBF8OCBOFB
- BIT-LENGTH:
- CAST-6
- BIT-LENGTH:
128160192224256 - MODES:
CBCCCMCFBCTREAXECBF8GCMLRWOCBOCB3OFBXTS
- BIT-LENGTH:
- CHACHA8
- BIT-LENGTH:
128256 - MODES:
CHACHA8POLY1305
- BIT-LENGTH:
- CHACHA12
- BIT-LENGTH:
128256 - MODES:
CHACHA12POLY1305
- BIT-LENGTH:
- CHACHA20
- BIT-LENGTH:
128256 - MODES:
CHACHA20POLY1305
- BIT-LENGTH:
- DES
- BIT-LENGTH:
64 - MODES:
CBCCFBCTREAXECBF8OCBOFB
- BIT-LENGTH:
- DES-EDE / DES-EDE2
- BIT-LENGTH:
128 - MODES:
CBCCFBCTREAXECBF8OCBOFB
- BIT-LENGTH:
- DES3 / DES-EDE3
- BIT-LENGTH:
192 - MODES:
CBCCFBCTREAXECBF8OCBOFB
- BIT-LENGTH:
- IDEA
- BIT-LENGTH:
128 - MODES:
CBCCFBCTREAXECBF8OCBOFB
- BIT-LENGTH:
- KASUMI / A5-3
- BIT-LENGTH:
128 - MODES:
CBCCFBCTREAXECBF8OCBOFB
- BIT-LENGTH:
- KHAZAD
- BIT-LENGTH:
128 - MODES:
CBCCFBCTREAXECBF8OCBOFB
- BIT-LENGTH:
- LEA
- BIT-LENGTH:
128192256 - MODES:
CBCCCMCFBCTREAXECBF8GCMLRWOCBOCB3OFBXTS
- BIT-LENGTH:
- MARS
- BIT-LENGTH:
128160192224256288320352384416448 - MODES:
CBCCCMCFBCTREAXECBF8GCMLRWOCBOCB3OFBXTS
- BIT-LENGTH:
- NOEKEON
- BIT-LENGTH:
128 - MODES:
CBCCCMCFBCTREAXECBF8GCMLRWOCBOCB3OFBXTS
- BIT-LENGTH:
- PRESENT
- BIT-LENGTH:
80128 - MODES:
CBCCFBCTREAXECBF8OCBOFB
- BIT-LENGTH:
- RC2
- BIT-LENGTH:
1024 - MODES:
CBCCFBCTREAXECBF8OCBOFB
- BIT-LENGTH:
- RC4
- BIT-LENGTH:
2048 - MODES:
none
- BIT-LENGTH:
- RC6
- BIT-LENGTH:
256 - MODES:
CBCCCMCFBCTREAXECBF8GCMLRWOCBOCB3OFBXTS
- BIT-LENGTH:
- SAFER-K64 / SAFER-SK64
- BIT-LENGTH:
64 - MODES:
CBCCFBCTREAXECBF8OCBOFB
- BIT-LENGTH:
- SAFER-K128 / SAFER-SK128
- BIT-LENGTH:
128 - MODES:
CBCCFBCTREAXECBF8OCBOFB
- BIT-LENGTH:
- SAFER+
- BIT-LENGTH:
128192256 - MODES:
CBCCCMCFBCTREAXECBF8GCMLRWOCBOCB3OFBXTS
- BIT-LENGTH:
- SEED
- BIT-LENGTH:
128 - MODES:
CBCCCMCFBCTREAXECBF8GCMLRWOCBOCB3OFBXTS
- BIT-LENGTH:
- SERPENT
- BIT-LENGTH:
128192256 - MODES:
CBCCCMCFBCTREAXECBF8GCMLRWOCBOCB3OFBXTS
- BIT-LENGTH:
- SKIPJACK
- BIT-LENGTH:
128 - MODES:
CBCCFBCTREAXECBF8OCBOFB
- BIT-LENGTH:
- SM4
- BIT-LENGTH:
128 - MODES:
CBCCCMCFBCTREAXECBF8GCMLRWOCBOCB3OFBXTS
- BIT-LENGTH:
- TEA
- BIT-LENGTH:
128 - MODES:
CBCCFBCTREAXECBF8OCBOFB
- BIT-LENGTH:
- TWOFISH
- BIT-LENGTH:
128192256 - MODES:
CBCCCMCFBCTREAXECBF8GCMLRWOCBOCB3OFBXTS
- BIT-LENGTH:
- XTEA
- BIT-LENGTH:
128 - MODES:
CBCCFBCTREAXECBF8OCBOFB
- BIT-LENGTH:
#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 NSStringNBSCryptoHash *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);- ADLER32
- BIT-LENGTH:
32
- BIT-LENGTH:
- ARIRANG
- BIT-LENGTH:
224256384512
- BIT-LENGTH:
- BLAKE2B
- BIT-LENGTH:
160256384512
- BIT-LENGTH:
- BLAKE2S
- BIT-LENGTH:
128160224256
- BIT-LENGTH:
- BLAKE3
- BIT-LENGTH:
256
- BIT-LENGTH:
- BLUEMIDNIGHTWISH
- BIT-LENGTH:
224256384512
- BIT-LENGTH:
- CHI
- BIT-LENGTH:
224256384512
- BIT-LENGTH:
- CRC-8
- BIT-LENGTH:
8 - VARIATIONS:
AESAUTOSARBLUETOOTHCCITTCDMA2000DARCDVB-S2EBUGSM-AGSM-BHITAGI-432-1ICODEITULTEMAXIMMAXIM-DOWNMIFARE-MADNRSC-5OPENSEAFTYROHCSAE-J1850SMBUSTECH-3250WCDMA
- BIT-LENGTH:
- CRC-16
- BIT-LENGTH:
16 - VARIATIONS:
ACORNARCAUG-CCITTAUTOSARBLUETOOTHBUYPASSCCITTCCITT-FALSECCITT-TRUECDMA2000CMSDARCDDS110DECT-RDECT-XDNPEN-13757EPCEPC-C1G2GENIBUSGSMIBMIBM-3740IBM-SDLCICODEIEC-61158-2ISO-HDLCISO-IEC-14443-3-AISO-IEC-14443-3-BKERMITLHALJ1200LTEM17MAXIMMAXIM-DOWNMCRF4XXMODBUSNRSC-5OPENSEAFTY-AOPENSEAFTY-BPROFIBUSRIELLOSPI-FUJITSUT10-DIFTELEDISKTMS37157UMTSUSBV41LSBV41MSBVERIFONEX-25XMODEMZMODEM
- BIT-LENGTH:
- CRC-24
- BIT-LENGTH:
24 - VARIATIONS:
BLEFLEXRAY-AFLEXRAY-BINTERLAKENLTE-ALTE-BOPENPGPOS-9RADIX-64RTCM-104V3WDCMA
- BIT-LENGTH:
- CRC-32
- BIT-LENGTH:
32 - VARIATIONS:
AAL5ADCCPAIXMAUTOSARBBASE91-CBASE91-DBZIP2CCASTAGNOLICD-ROM-EDCCKSUMDDECT-BIEEE-802-3INTERLAKENISCSIISO-HDLCJAMCRCMEFMPEG2NVMEPOSIXQV42XFERXZ
- BIT-LENGTH:
- CRC-64
- BIT-LENGTH:
64 - VARIATIONS:
ECMA-182GO-ECMAGO-ISOISO-3309MSNVMEREDISWEXZ
- BIT-LENGTH:
- ECHO
- BIT-LENGTH:
224256384512
- BIT-LENGTH:
- FNV1-32 / FNV1a-32
- BIT-LENGTH:
32
- BIT-LENGTH:
- FNV1-64 / FNV1a-64
- BIT-LENGTH:
64
- BIT-LENGTH:
- FUGUE
- BIT-LENGTH:
224256384512
- BIT-LENGTH:
- GOST / GOST-CRYPTO
- BIT-LENGTH:
256
- BIT-LENGTH:
- GROESTL
- BIT-LENGTH:
224256384512
- BIT-LENGTH:
- HAMSI
- BIT-LENGTH:
224256384512
- BIT-LENGTH:
- HAVAL-3 / HAVAL-4 / HAVAL-5
- BIT-LENGTH:
128160192224256
- BIT-LENGTH:
- JH
- BIT-LENGTH:
224256384512
- BIT-LENGTH:
- JOAAT
- BIT-LENGTH:
32
- BIT-LENGTH:
- KECCAK
- BIT-LENGTH:
224256384512
- BIT-LENGTH:
- KUPYNA
- BIT-LENGTH:
256512
- BIT-LENGTH:
- LANE
- BIT-LENGTH:
224256384512
- BIT-LENGTH:
- LESAMNTA
- BIT-LENGTH:
224256384512
- BIT-LENGTH:
- LUFFA
- BIT-LENGTH:
224256384512
- BIT-LENGTH:
- MD2 / MD4 / MD5
- BIT-LENGTH:
128
- BIT-LENGTH:
- MD6
- BIT-LENGTH:
128160192224256384512
- BIT-LENGTH:
- MURMUR3A
- BIT-LENGTH:
32
- BIT-LENGTH:
- MURMUR3C / MURMUR3F
- BIT-LENGTH:
128
- BIT-LENGTH:
- RIPEMD
- BIT-LENGTH:
128160256320
- BIT-LENGTH:
- SHA-1
- BIT-LENGTH:
160
- BIT-LENGTH:
- SHA-2
- BIT-LENGTH:
224256384512
- BIT-LENGTH:
- SHA-3
- BIT-LENGTH:
224256384512
- BIT-LENGTH:
- SHABAL
- BIT-LENGTH:
192224256384512
- BIT-LENGTH:
- SHAKE
- BIT-LENGTH:
128256
- BIT-LENGTH:
- SHAVITE3
- BIT-LENGTH:
224256384512
- BIT-LENGTH:
- SIMD
- BIT-LENGTH:
224256384512
- BIT-LENGTH:
- SM3
- BIT-LENGTH:
256
- BIT-LENGTH:
- SNEFRU
- BIT-LENGTH:
256
- BIT-LENGTH:
- STREEBOG / GOST-R34112012
- BIT-LENGTH:
256512
- BIT-LENGTH:
- SWIFFTX
- BIT-LENGTH:
224256384512
- BIT-LENGTH:
- TIGER / TIGER-2
- BIT-LENGTH:
128160192
- BIT-LENGTH:
- WHIRPOOL
- BIT-LENGTH:
512
- BIT-LENGTH:
- XXH
- BIT-LENGTH:
3264128
- BIT-LENGTH:
- F9
cipher
- HMAC
hash
- OMAC
cipher
- PELICAN
hash
- PMAC
cipher
- POLY1305
hash