在Objective-C中使用NaCl / libsodium crypto

时间:2013-09-18 07:22:52

标签: objective-c c cryptography libsodium nacl-cryptography

我试着找出在Objective-C中使用NaCl库的正确方法。密钥生成似乎很容易:

- (void) generateKeypair {
    unsigned char pk[crypto_box_PUBLICKEYBYTES];
    unsigned char sk[crypto_box_SECRETKEYBYTES];

    sodium_init();
    crypto_box_keypair(pk,sk);
    self.publicKey = [NSData dataWithBytes:(const void *)pk
                                            length:sizeof(unsigned char)*crypto_box_PUBLICKEYBYTES];
    self.sekretKey = [NSData dataWithBytes:(const void *)sk
                                            length:sizeof(unsigned char)*crypto_box_PUBLICKEYBYTES];
}

这很容易。但是使用crypto_box(c,m,mlen,n,pk,sk)函数,我会混淆填充,ZEROBYTES以及如何管理对象所有权。如何为crypto_box(c,m,mlen,n,pk,sk)和朋友构建一个简单的包装器?

2 个答案:

答案 0 :(得分:0)

一个选项是Sodium-Objc。这些绑定尚未更新一段时间,但它们仍然非常好,并且在Objective-C中使用crypto_box非常容易。

另一个选项是Swift-Sodium,更完整。它是用Swift编写的,但是从Swift调用Objective-C应该很容易。

但是如果你想要低级别并直接调用C函数,你实际上不必担心填充。只需使用easy interfacecrypto_box_easy()crypto_box_open_easy()

crypto_box_easy()将验证者(crypto_box_MACBYTES字节长)紧跟加密消息。无需额外填充。并且crypto_box_open_easy()解密消息而不需要额外的填充或不得不移动字节。

答案 1 :(得分:-1)

我在这个lib中编写了crypto_secretbox,并按文档中的定义执行填充:https://github.com/gabriel/NACL/blob/master/NACL/NASecretBox.m

如果填充设置与crypto_box相同,则可能会有所帮助。