Ejemplo n.º 1
0
int crypto_aead_decrypt(
    unsigned char *m,unsigned long long *mlen,
    unsigned char *nsec,
    const unsigned char *c,unsigned long long clen,
    const unsigned char *ad,unsigned long long adlen,
    const unsigned char *npub,
    const unsigned char *k
    )
{
    Keyak_Instance instance;
    unsigned char tag[16];

    if (clen < 16)
        return -1;

    RiverKeyak_Initialize(&instance, k, 128, npub);
    Keyak_FeedAssociatedData(&instance, ad, adlen);
    *mlen = clen-16;
    Keyak_UnwrapCiphertext(&instance, c, m, *mlen);
    Keyak_GetTag(&instance, tag, 16);
    if (memcmp(tag, c+(*mlen), 16) != 0) {
        memset(m, 0, *mlen);
        return -1;
    }
    else
        return 0;
}
Ejemplo n.º 2
0
int crypto_aead_encrypt(
    unsigned char *c,unsigned long long *clen,
    const unsigned char *m,unsigned long long mlen,
    const unsigned char *ad,unsigned long long adlen,
    const unsigned char *nsec,
    const unsigned char *npub,
    const unsigned char *k
    )
{
    RiverKeyak_Instance instance;

    RiverKeyak_Initialize( &instance, k, 16, npub, 58, 0, 0, 0, 0 );
    RiverKeyak_Wrap( &instance, m, c, (size_t)mlen, ad, (size_t)adlen, c+mlen, 0, 0 );
    *clen = mlen + 16;
    return 0;
}
Ejemplo n.º 3
0
int crypto_aead_encrypt(
    unsigned char *c,unsigned long long *clen,
    const unsigned char *m,unsigned long long mlen,
    const unsigned char *ad,unsigned long long adlen,
    const unsigned char *nsec,
    const unsigned char *npub,
    const unsigned char *k
    )
{
    Keyak_Instance instance;

    RiverKeyak_Initialize(&instance, k, 128, npub);
    Keyak_FeedAssociatedData(&instance, ad, adlen);
    Keyak_WrapPlaintext(&instance, m, c, mlen);
    *clen = mlen;
    Keyak_GetTag(&instance, c+mlen, 16);
    *clen += 16;

    return 0;
}
Ejemplo n.º 4
0
int crypto_aead_decrypt(
    unsigned char *m,unsigned long long *mlen,
    unsigned char *nsec,
    const unsigned char *c,unsigned long long clen,
    const unsigned char *ad,unsigned long long adlen,
    const unsigned char *npub,
    const unsigned char *k
    )
{
    RiverKeyak_Instance instance;
    unsigned long long mlen_;

    if (clen < 16)
        return -1;
    RiverKeyak_Initialize( &instance, k, 16, npub, 58, 0, 0, 1, 0 );
    mlen_ = clen - 16;
    *mlen = mlen_;
    if ( RiverKeyak_Wrap( &instance, c, m, (size_t)mlen_, ad, (size_t)adlen, (unsigned char *)c+mlen_, 1, 0 ) == 1 )
        return 0;
    return -1;
}