On 12 March 2016 at 20:11, Andrew Cagney <andrew.cag...@gmail.com> wrote:

> On 11 March 2016 at 13:23, Andrew Cagney <andrew.cag...@gmail.com> wrote:
> > Given a clear-text key and clear-text data (lots of it), I'm trying to
> > compute a clear-text RFC 2104 HMAC aka IPSEC prf()
> >
> > If the key was all FIPS secure in a PK11SymKey then I believe I could
> > follow sample3 and kick things off with:
> >
> >     context = PK11_CreateContextBySymKey(CKM_MD5_HMAC, CKA_SIGN, key,
> > &noParams);
> >
> > Alas, it isn't :-(  Short of implementing the RFC 2104 calculation, or
> > fudging up some secret key material, is there a way to do this?
>
>
Reading the, er, documentation in /usr/include/nss3, I found <alghmac.c>
which seems to work for this specific case.

(It doesn't work in general though, as it lacks HMAC_Update(key) and key =
HMAC_Finish()).

Andrew



> To make my question more concrete.  Contrast how OpenSSL vs NSS need
> to be initialized:
>
>         const char hmackey[33] = ".....";
> #if defined(WITH_OPENSSL)
>         HMAC_Init(&c, hmackey, sizeof(hmackey)-1, EVP_sha256());
> #elif defined(WITH_NSS)
>         PK11Context *c = NULL;
>         {
>                 PK11SymKey *key = nss_hmackey();
>                 if (key == NULL) {
>                         goto end;
>                 }
>                 SECItem noParams = { .data = 0, .len = 0, };
>                 c = PK11_CreateContextBySymKey(CKM_SHA256_HMAC, CKA_SIGN,
>                                                key, &noParams);
>                 if (c == NULL) {
>                         debug_log("PK11_CreateContextBySymKey() failed");
>                         goto end;
>                 }
>         }
>         PK11_DigestBegin(c);
> #endif
>
> where nss_hmackey() uses "magic" to convert the string into a PK11SymKey.
>
>
> > BTW, it's probably worth pointing out that for libreswan I had similar
> > problems but needed to keep the resulting HMAC secure.  For instance,
> > given a clear-text key and secure data, compute a secure hmac
> > (SKEYSEED = prf(Ni | Nr, g^ir)).
> >
> > Andrew
>
-- 
dev-tech-crypto mailing list
dev-tech-crypto@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-tech-crypto

Reply via email to