| // Copyright 2016 Google Inc. | 
 | // | 
 | // Licensed under the Apache License, Version 2.0 (the "License"); | 
 | // you may not use this file except in compliance with the License. | 
 | // You may obtain a copy of the License at | 
 | // | 
 | //     http://www.apache.org/licenses/LICENSE-2.0 | 
 | // | 
 | // Unless required by applicable law or agreed to in writing, software | 
 | // distributed under the License is distributed on an "AS IS" BASIS, | 
 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 | // See the License for the specific language governing permissions and | 
 | // limitations under the License. | 
 | #include <stdio.h> | 
 | #include <string.h> | 
 |  | 
 | #include "cryptoc/p256_prng.h" | 
 |  | 
 | static const uint8_t expected[P256_PRNG_SIZE] = { | 
 |   0x3c,0x0a,0x3f,0xdc,0x53,0x13,0xde,0x17, | 
 |   0x5f,0xad,0xc5,0x53,0xd7,0x6b,0xc6,0x28, | 
 |   0x40,0x37,0x23,0x3c,0x26,0x80,0xe0,0xcd, | 
 |   0x4c,0xf6,0xfd,0x11,0x28,0x18,0xfe,0x31 | 
 | }; | 
 |  | 
 | int main(int argc, char* argv[]) { | 
 |   P256_PRNG_CTX ctx; | 
 |   uint8_t rnd[P256_PRNG_SIZE]; | 
 |   int i; | 
 |  | 
 |   p256_prng_init(&ctx, "p256_prng_test", 14, 0); | 
 |  | 
 |   if (ctx.instance_count != 0) return 1; | 
 |   if (ctx.call_count != 0) return 1; | 
 |  | 
 |   p256_prng_draw(&ctx, rnd); | 
 |  | 
 |   if (ctx.instance_count != 0) return 1; | 
 |   if (ctx.call_count != 1) return 1; | 
 |  | 
 |   p256_prng_draw(&ctx, rnd); | 
 |  | 
 |   if (ctx.instance_count != 0) return 1; | 
 |   if (ctx.call_count != 2) return 1; | 
 |  | 
 |   // Compare prng output against known good output. | 
 |   // This catches endianess issues and algorigthm changes. | 
 |   if (memcmp(rnd, expected, P256_PRNG_SIZE)) { | 
 |     // Print failed output in case it is to be the new known good output. | 
 |     printf("{"); | 
 |     for (i = 0; i < P256_PRNG_SIZE; ++i) { | 
 |       if (i) printf(","); | 
 |       printf("0x%02x", rnd[i]); | 
 |     } | 
 |     printf("}\n"); | 
 |  | 
 |     return 1; | 
 |   } | 
 |  | 
 |   return 0; | 
 | } |