fips_rand_selftest.c revision 193645
155682Smarkm/* ==================================================================== 2233294Sstas * Copyright (c) 2003 The OpenSSL Project. All rights reserved. 3233294Sstas * 4233294Sstas * Redistribution and use in source and binary forms, with or without 555682Smarkm * modification, are permitted provided that the following conditions 6233294Sstas * are met: 7233294Sstas * 8233294Sstas * 1. Redistributions of source code must retain the above copyright 955682Smarkm * notice, this list of conditions and the following disclaimer. 10233294Sstas * 11233294Sstas * 2. Redistributions in binary form must reproduce the above copyright 1255682Smarkm * notice, this list of conditions and the following disclaimer in 13233294Sstas * the documentation and/or other materials provided with the 14233294Sstas * distribution. 15233294Sstas * 1655682Smarkm * 3. All advertising materials mentioning features or use of this 17233294Sstas * software must display the following acknowledgment: 18233294Sstas * "This product includes software developed by the OpenSSL Project 19233294Sstas * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" 2055682Smarkm * 21233294Sstas * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 22233294Sstas * endorse or promote products derived from this software without 23233294Sstas * prior written permission. For written permission, please contact 24233294Sstas * openssl-core@openssl.org. 25233294Sstas * 26233294Sstas * 5. Products derived from this software may not be called "OpenSSL" 27233294Sstas * nor may "OpenSSL" appear in their names without prior written 28233294Sstas * permission of the OpenSSL Project. 29233294Sstas * 30233294Sstas * 6. Redistributions of any form whatsoever must retain the following 31233294Sstas * acknowledgment: 3255682Smarkm * "This product includes software developed by the OpenSSL Project 3355682Smarkm * for use in the OpenSSL Toolkit (http://www.openssl.org/)" 3455682Smarkm * 3555682Smarkm * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 36233294Sstas * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 3755682Smarkm * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 38233294Sstas * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 39233294Sstas * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 4072445Sassar * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 41233294Sstas * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 42233294Sstas * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 43178825Sdfr * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 44178825Sdfr * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 4572445Sassar * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 4655682Smarkm * OF THE POSSIBILITY OF SUCH DAMAGE. 47178825Sdfr * 48178825Sdfr */ 4955682Smarkm 50233294Sstas#include <string.h> 51233294Sstas#include <openssl/err.h> 52233294Sstas#include <openssl/fips.h> 53233294Sstas#include <openssl/rand.h> 54233294Sstas#include <openssl/fips_rand.h> 5555682Smarkm 56233294Sstas#ifdef OPENSSL_FIPS 57233294Sstas 58233294Sstas 59233294Sstas 60233294Sstastypedef struct 61233294Sstas { 62233294Sstas unsigned char DT[16]; 63233294Sstas unsigned char V[16]; 64233294Sstas unsigned char R[16]; 65233294Sstas } AES_PRNG_TV; 66233294Sstas 67233294Sstas/* The following test vectors are taken directly from the RGNVS spec */ 68233294Sstas 69233294Sstasstatic unsigned char aes_128_key[16] = 70233294Sstas {0xf3,0xb1,0x66,0x6d,0x13,0x60,0x72,0x42, 71233294Sstas 0xed,0x06,0x1c,0xab,0xb8,0xd4,0x62,0x02}; 72233294Sstas 73233294Sstasstatic AES_PRNG_TV aes_128_tv[] = { 74233294Sstas { 75233294Sstas /* DT */ 76233294Sstas {0xe6,0xb3,0xbe,0x78,0x2a,0x23,0xfa,0x62, 77233294Sstas 0xd7,0x1d,0x4a,0xfb,0xb0,0xe9,0x22,0xf9}, 78233294Sstas /* V */ 79233294Sstas {0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 80233294Sstas 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 81233294Sstas /* R */ 82233294Sstas {0x59,0x53,0x1e,0xd1,0x3b,0xb0,0xc0,0x55, 83233294Sstas 0x84,0x79,0x66,0x85,0xc1,0x2f,0x76,0x41} 84233294Sstas }, 85233294Sstas { 86178825Sdfr /* DT */ 87233294Sstas {0xe6,0xb3,0xbe,0x78,0x2a,0x23,0xfa,0x62, 88233294Sstas 0xd7,0x1d,0x4a,0xfb,0xb0,0xe9,0x22,0xfa}, 89233294Sstas /* V */ 90178825Sdfr {0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 91233294Sstas 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 92233294Sstas /* R */ 93233294Sstas {0x7c,0x22,0x2c,0xf4,0xca,0x8f,0xa2,0x4c, 94233294Sstas 0x1c,0x9c,0xb6,0x41,0xa9,0xf3,0x22,0x0d} 95233294Sstas }, 96233294Sstas { 9755682Smarkm /* DT */ 9855682Smarkm {0xe6,0xb3,0xbe,0x78,0x2a,0x23,0xfa,0x62, 9955682Smarkm 0xd7,0x1d,0x4a,0xfb,0xb0,0xe9,0x22,0xfb}, 10072445Sassar /* V */ 101178825Sdfr {0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 10255682Smarkm 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 10355682Smarkm /* R */ 10455682Smarkm {0x8a,0xaa,0x00,0x39,0x66,0x67,0x5b,0xe5, 10555682Smarkm 0x29,0x14,0x28,0x81,0xa9,0x4d,0x4e,0xc7} 106178825Sdfr }, 10755682Smarkm { 10855682Smarkm /* DT */ 10972445Sassar {0xe6,0xb3,0xbe,0x78,0x2a,0x23,0xfa,0x62, 110233294Sstas 0xd7,0x1d,0x4a,0xfb,0xb0,0xe9,0x22,0xfc}, 11172445Sassar /* V */ 11272445Sassar {0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11372445Sassar 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 11472445Sassar /* R */ 11572445Sassar {0x88,0xdd,0xa4,0x56,0x30,0x24,0x23,0xe5, 11672445Sassar 0xf6,0x9d,0xa5,0x7e,0x7b,0x95,0xc7,0x3a} 11772445Sassar }, 11872445Sassar { 11972445Sassar /* DT */ 12072445Sassar {0xe6,0xb3,0xbe,0x78,0x2a,0x23,0xfa,0x62, 121178825Sdfr 0xd7,0x1d,0x4a,0xfb,0xb0,0xe9,0x22,0xfd}, 122233294Sstas /* V */ 123178825Sdfr {0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 12455682Smarkm 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 12555682Smarkm /* R */ 12655682Smarkm {0x05,0x25,0x92,0x46,0x61,0x79,0xd2,0xcb, 127178825Sdfr 0x78,0xc4,0x0b,0x14,0x0a,0x5a,0x9a,0xc8} 128178825Sdfr }, 12955682Smarkm { 130178825Sdfr /* DT */ 13155682Smarkm {0xe6,0xb3,0xbe,0x78,0x2a,0x23,0xfa,0x62, 13255682Smarkm 0xd7,0x1d,0x4a,0xfb,0xb0,0xe9,0x23,0x77}, 13355682Smarkm /* V */ 13455682Smarkm {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 135178825Sdfr 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe}, 13655682Smarkm /* R */ 137178825Sdfr {0x0d,0xd5,0xa0,0x36,0x7a,0x59,0x26,0xbc, 13855682Smarkm 0x48,0xd9,0x38,0xbf,0xf0,0x85,0x8f,0xea} 139233294Sstas }, 14055682Smarkm { 14155682Smarkm /* DT */ 14255682Smarkm {0xe6,0xb3,0xbe,0x78,0x2a,0x23,0xfa,0x62, 143233294Sstas 0xd7,0x1d,0x4a,0xfb,0xb0,0xe9,0x23,0x78}, 144233294Sstas /* V */ 145233294Sstas {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 14655682Smarkm 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}, 14755682Smarkm /* R */ 14855682Smarkm {0xae,0x53,0x87,0xee,0x8c,0xd9,0x12,0xf5, 14955682Smarkm 0x73,0x53,0xae,0x03,0xf9,0xd5,0x13,0x33} 15055682Smarkm }, 151233294Sstas}; 152233294Sstas 153233294Sstasstatic unsigned char aes_192_key[24] = 15455682Smarkm {0x15,0xd8,0x78,0x0d,0x62,0xd3,0x25,0x6e, 15555682Smarkm 0x44,0x64,0x10,0x13,0x60,0x2b,0xa9,0xbc, 156233294Sstas 0x4a,0xfb,0xca,0xeb,0x4c,0x8b,0x99,0x3b}; 15755682Smarkm 158178825Sdfrstatic AES_PRNG_TV aes_192_tv[] = { 15955682Smarkm { 16055682Smarkm /* DT */ 16155682Smarkm {0x3f,0xd8,0xff,0xe8,0x80,0x69,0x8b,0xc1, 16255682Smarkm 0xbf,0x99,0x7d,0xa4,0x24,0x78,0xf3,0x4b}, 163178825Sdfr /* V */ 16455682Smarkm {0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 16555682Smarkm 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 16655682Smarkm /* R */ 16755682Smarkm {0x17,0x07,0xd5,0x28,0x19,0x79,0x1e,0xef, 16855682Smarkm 0xa5,0x0c,0xbf,0x25,0xe5,0x56,0xb4,0x93} 16955682Smarkm }, 17055682Smarkm { 171233294Sstas /* DT */ 172178825Sdfr {0x3f,0xd8,0xff,0xe8,0x80,0x69,0x8b,0xc1, 17355682Smarkm 0xbf,0x99,0x7d,0xa4,0x24,0x78,0xf3,0x4c}, 174233294Sstas /* V */ 175233294Sstas {0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 17655682Smarkm 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 17755682Smarkm /* R */ 17855682Smarkm {0x92,0x8d,0xbe,0x07,0xdd,0xc7,0x58,0xc0, 17972445Sassar 0x6f,0x35,0x41,0x9b,0x17,0xc9,0xbd,0x9b} 18072445Sassar }, 18172445Sassar { 18255682Smarkm /* DT */ 18355682Smarkm {0x3f,0xd8,0xff,0xe8,0x80,0x69,0x8b,0xc1, 18455682Smarkm 0xbf,0x99,0x7d,0xa4,0x24,0x78,0xf3,0x4d}, 18555682Smarkm /* V */ 186178825Sdfr {0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 187178825Sdfr 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 18855682Smarkm /* R */ 189178825Sdfr {0xd5,0xde,0xf4,0x50,0xf3,0xb7,0x10,0x4e, 190178825Sdfr 0xb8,0xc6,0xf8,0xcf,0xe2,0xb1,0xca,0xa2} 191178825Sdfr }, 19255682Smarkm { 19355682Smarkm /* DT */ 19455682Smarkm {0x3f,0xd8,0xff,0xe8,0x80,0x69,0x8b,0xc1, 19555682Smarkm 0xbf,0x99,0x7d,0xa4,0x24,0x78,0xf3,0x4e}, 19655682Smarkm /* V */ 19755682Smarkm {0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 19855682Smarkm 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 19955682Smarkm /* R */ 20055682Smarkm {0xce,0x29,0x08,0x43,0xfc,0x34,0x41,0xe7, 20155682Smarkm 0x47,0x8f,0xb3,0x66,0x2b,0x46,0xb1,0xbb} 202233294Sstas }, 203178825Sdfr { 204233294Sstas /* DT */ 20555682Smarkm {0x3f,0xd8,0xff,0xe8,0x80,0x69,0x8b,0xc1, 206178825Sdfr 0xbf,0x99,0x7d,0xa4,0x24,0x78,0xf3,0x4f}, 207178825Sdfr /* V */ 208178825Sdfr {0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 209102644Snectar 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 210102644Snectar /* R */ 21155682Smarkm {0xb3,0x26,0x0f,0xf5,0xd6,0xca,0xa8,0xbf, 212178825Sdfr 0x89,0xb8,0x5e,0x2f,0x22,0x56,0x92,0x2f} 213178825Sdfr }, 214178825Sdfr { 215178825Sdfr /* DT */ 216178825Sdfr {0x3f,0xd8,0xff,0xe8,0x80,0x69,0x8b,0xc1, 217178825Sdfr 0xbf,0x99,0x7d,0xa4,0x24,0x78,0xf3,0xc9}, 218102644Snectar /* V */ 219102644Snectar {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 220178825Sdfr 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe}, 221178825Sdfr /* R */ 222178825Sdfr {0x05,0xeb,0x18,0x52,0x34,0x43,0x00,0x43, 223178825Sdfr 0x6e,0x5a,0xa5,0xfe,0x7b,0x32,0xc4,0x2d} 224178825Sdfr }, 225178825Sdfr { 22655682Smarkm /* DT */ 22755682Smarkm {0x3f,0xd8,0xff,0xe8,0x80,0x69,0x8b,0xc1, 228178825Sdfr 0xbf,0x99,0x7d,0xa4,0x24,0x78,0xf3,0xca}, 229178825Sdfr /* V */ 230178825Sdfr {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 231178825Sdfr 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}, 232102644Snectar /* R */ 23355682Smarkm {0x15,0x3c,0xe8,0xd1,0x04,0xc7,0xad,0x50, 23455682Smarkm 0x0b,0xf0,0x07,0x16,0xe7,0x56,0x7a,0xea} 235178825Sdfr }, 236178825Sdfr}; 23755682Smarkm 23855682Smarkmstatic unsigned char aes_256_key[32] = 23955682Smarkm {0x6d,0x14,0x06,0x6c,0xb6,0xd8,0x21,0x2d, 24055682Smarkm 0x82,0x8d,0xfa,0xf2,0x7a,0x03,0xb7,0x9f, 241178825Sdfr 0x0c,0xc7,0x3e,0xcd,0x76,0xeb,0xee,0xb5, 242178825Sdfr 0x21,0x05,0x8c,0x4f,0x31,0x7a,0x80,0xbb}; 243178825Sdfr 244178825Sdfrstatic AES_PRNG_TV aes_256_tv[] = { 24555682Smarkm { 246178825Sdfr /* DT */ 247178825Sdfr {0xda,0x3a,0x41,0xec,0x1d,0xa3,0xb0,0xd5, 248178825Sdfr 0xf2,0xa9,0x4e,0x34,0x74,0x8e,0x9e,0x88}, 249178825Sdfr /* V */ 250233294Sstas {0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 251233294Sstas 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 252178825Sdfr /* R */ 25355682Smarkm {0x35,0xc7,0xef,0xa7,0x78,0x4d,0x29,0xbc, 254178825Sdfr 0x82,0x79,0x99,0xfb,0xd0,0xb3,0x3b,0x72} 255178825Sdfr }, 25655682Smarkm { 25755682Smarkm /* DT */ 258178825Sdfr {0xda,0x3a,0x41,0xec,0x1d,0xa3,0xb0,0xd5, 259233294Sstas 0xf2,0xa9,0x4e,0x34,0x74,0x8e,0x9e,0x89}, 260178825Sdfr /* V */ 261233294Sstas {0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 262233294Sstas 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 263178825Sdfr /* R */ 264233294Sstas {0x6c,0xf4,0x42,0x5d,0xc7,0x04,0x1a,0x41, 265178825Sdfr 0x28,0x2a,0x78,0xa9,0xb0,0x12,0xc4,0x95} 266178825Sdfr }, 267178825Sdfr { 268233294Sstas /* DT */ 269178825Sdfr {0xda,0x3a,0x41,0xec,0x1d,0xa3,0xb0,0xd5, 270178825Sdfr 0xf2,0xa9,0x4e,0x34,0x74,0x8e,0x9e,0x8a}, 271178825Sdfr /* V */ 272178825Sdfr {0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 273178825Sdfr 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 274233294Sstas /* R */ 275178825Sdfr {0x16,0x90,0xa4,0xff,0x7b,0x7e,0xb9,0x30, 276178825Sdfr 0xdb,0x67,0x4b,0xac,0x2d,0xe1,0xd1,0x75} 277178825Sdfr }, 278178825Sdfr { 279178825Sdfr /* DT */ 280178825Sdfr {0xda,0x3a,0x41,0xec,0x1d,0xa3,0xb0,0xd5, 281178825Sdfr 0xf2,0xa9,0x4e,0x34,0x74,0x8e,0x9e,0x8b}, 282178825Sdfr /* V */ 283178825Sdfr {0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 284178825Sdfr 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 285178825Sdfr /* R */ 286178825Sdfr {0x14,0x6f,0xf5,0x95,0xa1,0x46,0x65,0x30, 287178825Sdfr 0xbc,0x57,0xe2,0x4a,0xf7,0x45,0x62,0x05} 28855682Smarkm }, 289178825Sdfr { 290178825Sdfr /* DT */ 291178825Sdfr {0xda,0x3a,0x41,0xec,0x1d,0xa3,0xb0,0xd5, 292178825Sdfr 0xf2,0xa9,0x4e,0x34,0x74,0x8e,0x9e,0x8c}, 293178825Sdfr /* V */ 294178825Sdfr {0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 29572445Sassar 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 29655682Smarkm /* R */ 29772445Sassar {0x96,0xe2,0xb4,0x1e,0x66,0x5e,0x0f,0xa4, 29872445Sassar 0xc5,0xcd,0xa2,0x07,0xcc,0xb7,0x94,0x40} 29972445Sassar }, 30072445Sassar { 30172445Sassar /* DT */ 30272445Sassar {0xda,0x3a,0x41,0xec,0x1d,0xa3,0xb0,0xd5, 30372445Sassar 0xf2,0xa9,0x4e,0x34,0x74,0x8e,0x9f,0x06}, 304178825Sdfr /* V */ 305178825Sdfr {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 306178825Sdfr 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe}, 30772445Sassar /* R */ 30872445Sassar {0x61,0xce,0x1d,0x6a,0x48,0x75,0x97,0x28, 30972445Sassar 0x4b,0x41,0xde,0x18,0x44,0x4f,0x56,0xec} 31072445Sassar }, 31172445Sassar { 312178825Sdfr /* DT */ 31355682Smarkm {0xda,0x3a,0x41,0xec,0x1d,0xa3,0xb0,0xd5, 31455682Smarkm 0xf2,0xa9,0x4e,0x34,0x74,0x8e,0x9f,0x07}, 31555682Smarkm /* V */ 31655682Smarkm {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 31772445Sassar 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}, 318178825Sdfr /* R */ 319178825Sdfr {0x52,0x89,0x59,0x79,0x2d,0xaa,0x28,0xb3, 320178825Sdfr 0xb0,0x8a,0x3e,0x70,0xfa,0x71,0x59,0x84} 321178825Sdfr }, 322178825Sdfr}; 323178825Sdfr 324178825Sdfr 325178825Sdfrvoid FIPS_corrupt_rng() 326178825Sdfr { 327178825Sdfr aes_192_tv[0].V[0]++; 328178825Sdfr } 329178825Sdfr 330178825Sdfr#define fips_rand_test(key, tv) \ 331178825Sdfr do_rand_test(key, sizeof key, tv, sizeof(tv)/sizeof(AES_PRNG_TV)) 332178825Sdfr 333178825Sdfrstatic int do_rand_test(unsigned char *key, int keylen, 334178825Sdfr AES_PRNG_TV *tv, int ntv) 335178825Sdfr { 336178825Sdfr unsigned char R[16]; 337178825Sdfr int i; 338178825Sdfr if (!FIPS_rand_set_key(key, keylen)) 339178825Sdfr return 0; 340178825Sdfr for (i = 0; i < ntv; i++) 341178825Sdfr { 342233294Sstas FIPS_rand_seed(tv[i].V, 16); 34372445Sassar FIPS_rand_set_dt(tv[i].DT); 34472445Sassar FIPS_rand_bytes(R, 16); 34572445Sassar if (memcmp(R, tv[i].R, 16)) 34672445Sassar return 0; 34772445Sassar } 34872445Sassar return 1; 349233294Sstas } 35072445Sassar 351178825Sdfr 35272445Sassarint FIPS_selftest_rng() 353107207Snectar { 354107207Snectar FIPS_rand_reset(); 355233294Sstas if (!FIPS_rand_test_mode()) 356178825Sdfr { 357178825Sdfr FIPSerr(FIPS_F_FIPS_SELFTEST_RNG,FIPS_R_SELFTEST_FAILED); 358178825Sdfr return 0; 359107207Snectar } 360107207Snectar if (!fips_rand_test(aes_128_key,aes_128_tv) 361107207Snectar || !fips_rand_test(aes_192_key, aes_192_tv) 362107207Snectar || !fips_rand_test(aes_256_key, aes_256_tv)) 363233294Sstas { 364107207Snectar FIPSerr(FIPS_F_FIPS_SELFTEST_RNG,FIPS_R_SELFTEST_FAILED); 365107207Snectar return 0; 366107207Snectar } 367107207Snectar FIPS_rand_reset(); 368233294Sstas return 1; 369107207Snectar } 370107207Snectar 371178825Sdfr#endif 37272445Sassar