123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- #ifndef HPAVKEYNID_SOURCE
- #define HPAVKEYNID_SOURCE
- #include <memory.h>
- #include "../key/HPAVKey.h"
- #include "../key/SHA256.h"
- void HPAVKeyNID (uint8_t NID [], const uint8_t NMK [], uint8_t level)
- {
- struct sha256 sha256;
- uint8_t digest [SHA256_DIGEST_LENGTH];
- unsigned rehash = 4;
- SHA256Reset (&sha256);
- SHA256Write (&sha256, NMK, HPAVKEY_NMK_LEN);
- SHA256Fetch (&sha256, digest);
- while (rehash--)
- {
- SHA256Reset (&sha256);
- SHA256Write (&sha256, digest, sizeof (digest));
- SHA256Fetch (&sha256, digest);
- }
- #if 1
- level <<= 4;
- digest [HPAVKEY_NID_LEN - 1] >>= 4;
- digest [HPAVKEY_NID_LEN - 1] |= level;
- #else
- digest [HPAVKEY_NID_LEN - 1] &= ~0xC0;
- digest [HPAVKEY_NID_LEN - 1] |= level << 6;
- #endif
- memcpy (NID, digest, HPAVKEY_NID_LEN);
- return;
- }
- #endif
|