From 25eb9d2eb6357946e103e12533c8b8ec768e30bb Mon Sep 17 00:00:00 2001 From: Rhys Weatherley Date: Sun, 18 Feb 2018 09:12:45 +1000 Subject: [PATCH] Update docs --- AES128_8cpp_source.html | 2 +- AES192_8cpp_source.html | 2 +- AES256_8cpp_source.html | 2 +- AESCommon_8cpp_source.html | 2 +- AES_8h_source.html | 2 +- AuthenticatedCipher_8cpp_source.html | 2 +- AuthenticatedCipher_8h_source.html | 2 +- BLAKE2b_8cpp_source.html | 2 +- BLAKE2b_8h_source.html | 2 +- BLAKE2s_8cpp_source.html | 2 +- BLAKE2s_8h_source.html | 2 +- BigNumberUtil_8cpp_source.html | 2 +- BigNumberUtil_8h_source.html | 2 +- Bitmap_8cpp_source.html | 2 +- Bitmap_8h_source.html | 2 +- BlinkLED_8cpp_source.html | 2 +- BlinkLED_8h_source.html | 2 +- BlockCipher_8cpp_source.html | 2 +- BlockCipher_8h_source.html | 2 +- BoolField_8cpp_source.html | 2 +- BoolField_8h_source.html | 2 +- CBC_8cpp_source.html | 2 +- CBC_8h_source.html | 2 +- CFB_8cpp_source.html | 2 +- CFB_8h_source.html | 2 +- CTR_8cpp_source.html | 2 +- CTR_8h_source.html | 2 +- ChaChaPoly_8cpp_source.html | 2 +- ChaChaPoly_8h_source.html | 2 +- ChaCha_8cpp_source.html | 2 +- ChaCha_8h_source.html | 2 +- Charlieplex_8cpp_source.html | 2 +- Charlieplex_8h_source.html | 2 +- ChaseLEDs_8cpp_source.html | 2 +- ChaseLEDs_8h_source.html | 2 +- Cipher_8cpp_source.html | 2 +- Cipher_8h_source.html | 2 +- Crypto_8cpp_source.html | 22 +- Crypto_8h_source.html | 2 +- Curve25519_8cpp_source.html | 8 +- Curve25519_8h_source.html | 2 +- DMD_8cpp_source.html | 2 +- DMD_8h_source.html | 2 +- DS1307RTC_8cpp_source.html | 2 +- DS1307RTC_8h_source.html | 2 +- DS3231RTC_8cpp_source.html | 2 +- DS3231RTC_8h_source.html | 2 +- DS3232RTC_8cpp_source.html | 2 +- DS3232RTC_8h_source.html | 2 +- DejaVuSans9_8h_source.html | 2 +- DejaVuSansBold9_8h_source.html | 2 +- DejaVuSansItalic9_8h_source.html | 2 +- EAX_8cpp_source.html | 2 +- EAX_8h_source.html | 2 +- EEPROM24_8cpp_source.html | 2 +- EEPROM24_8h_source.html | 2 +- Ed25519_8cpp_source.html | 4 +- Ed25519_8h_source.html | 2 +- Field_8cpp_source.html | 2 +- Field_8h_source.html | 2 +- Form_8cpp_source.html | 2 +- Form_8h_source.html | 2 +- GCM_8cpp_source.html | 2 +- GCM_8h_source.html | 2 +- GF128_8cpp_source.html | 2 +- GF128_8h_source.html | 2 +- GHASH_8cpp_source.html | 2 +- GHASH_8h_source.html | 2 +- Hash_8cpp_source.html | 2 +- Hash_8h_source.html | 2 +- I2CMaster_8cpp_source.html | 2 +- I2CMaster_8h_source.html | 2 +- IRreceiver_8cpp_source.html | 2 +- IRreceiver_8h_source.html | 2 +- IntField_8cpp_source.html | 2 +- IntField_8h_source.html | 2 +- KeccakCore_8cpp_source.html | 2 +- KeccakCore_8h_source.html | 2 +- LCD_8cpp_source.html | 2 +- LCD_8h_source.html | 2 +- ListField_8cpp_source.html | 2 +- ListField_8h_source.html | 2 +- LoginShell_8cpp_source.html | 2 +- LoginShell_8h_source.html | 2 +- Melody_8cpp_source.html | 2 +- Melody_8h_source.html | 2 +- Mono5x7_8h_source.html | 2 +- NewHope_8cpp_source.html | 4 +- NewHope_8h_source.html | 2 +- NoiseSource_8cpp_source.html | 4 +- NoiseSource_8h_source.html | 2 +- OFB_8cpp_source.html | 2 +- OFB_8h_source.html | 2 +- OMAC_8cpp_source.html | 2 +- OMAC_8h_source.html | 2 +- P521_8cpp_source.html | 4 +- P521_8h_source.html | 2 +- Poly1305_8cpp_source.html | 2 +- Poly1305_8h_source.html | 2 +- PowerSave_8cpp_source.html | 2 +- PowerSave_8h_source.html | 2 +- RC5_8h_source.html | 2 +- RNG_8cpp_source.html | 1037 ++++++++++--------- RNG_8h_source.html | 57 +- RTC_8cpp_source.html | 2 +- RTC_8h_source.html | 2 +- RingOscillatorNoiseSource_8cpp_source.html | 2 +- RingOscillatorNoiseSource_8h_source.html | 2 +- SHA256_8cpp_source.html | 2 +- SHA256_8h_source.html | 2 +- SHA3_8cpp_source.html | 2 +- SHA3_8h_source.html | 2 +- SHA512_8cpp_source.html | 2 +- SHA512_8h_source.html | 2 +- SHAKE_8cpp_source.html | 2 +- SHAKE_8h_source.html | 2 +- Shell_8cpp_source.html | 2 +- Shell_8h_source.html | 2 +- SoftI2C_8cpp_source.html | 2 +- SoftI2C_8h_source.html | 2 +- SpeckSmall_8cpp_source.html | 2 +- SpeckSmall_8h_source.html | 2 +- SpeckTiny_8cpp_source.html | 2 +- SpeckTiny_8h_source.html | 2 +- Speck_8cpp_source.html | 2 +- Speck_8h_source.html | 2 +- TelnetDefs_8h_source.html | 2 +- Terminal_8cpp_source.html | 2 +- Terminal_8h_source.html | 2 +- TextField_8cpp_source.html | 2 +- TextField_8h_source.html | 2 +- TimeField_8cpp_source.html | 2 +- TimeField_8h_source.html | 2 +- TransistorNoiseSource_8cpp_source.html | 2 +- TransistorNoiseSource_8h_source.html | 2 +- USBKeysExtra_8h_source.html | 2 +- XOF_8cpp_source.html | 2 +- XOF_8h_source.html | 2 +- XTS_8cpp_source.html | 2 +- XTS_8h_source.html | 2 +- alarm-clock_8dox.html | 2 +- alarm_clock.html | 2 +- annotated.html | 2 +- blink-blink_8dox.html | 2 +- blink-charlieplex_8dox.html | 2 +- blink-cylon_8dox.html | 2 +- blink-startrek_8dox.html | 2 +- blink_blink.html | 2 +- blink_charlieplex.html | 2 +- blink_cylon.html | 2 +- blink_startrek.html | 2 +- classAES128-members.html | 2 +- classAES128.html | 2 +- classAES192-members.html | 2 +- classAES192.html | 2 +- classAES256-members.html | 2 +- classAES256.html | 2 +- classAESCommon-members.html | 2 +- classAESCommon.html | 2 +- classAuthenticatedCipher-members.html | 2 +- classAuthenticatedCipher.html | 2 +- classBLAKE2b-members.html | 2 +- classBLAKE2b.html | 2 +- classBLAKE2s-members.html | 2 +- classBLAKE2s.html | 2 +- classBigNumberUtil-members.html | 2 +- classBigNumberUtil.html | 2 +- classBitmap-members.html | 2 +- classBitmap.html | 2 +- classBlinkLED-members.html | 2 +- classBlinkLED.html | 2 +- classBlockCipher-members.html | 2 +- classBlockCipher.html | 2 +- classBoolField-members.html | 2 +- classBoolField.html | 2 +- classCBC-members.html | 2 +- classCBC.html | 2 +- classCBCCommon-members.html | 2 +- classCBCCommon.html | 2 +- classCFB-members.html | 2 +- classCFB.html | 2 +- classCFBCommon-members.html | 2 +- classCFBCommon.html | 2 +- classCTR-members.html | 2 +- classCTR.html | 2 +- classCTRCommon-members.html | 2 +- classCTRCommon.html | 2 +- classChaCha-members.html | 2 +- classChaCha.html | 2 +- classChaChaPoly-members.html | 2 +- classChaChaPoly.html | 2 +- classCharlieplex-members.html | 2 +- classCharlieplex.html | 2 +- classChaseLEDs-members.html | 2 +- classChaseLEDs.html | 2 +- classCipher-members.html | 2 +- classCipher.html | 2 +- classCurve25519-members.html | 2 +- classCurve25519.html | 2 +- classDMD-members.html | 2 +- classDMD.html | 2 +- classDS1307RTC-members.html | 2 +- classDS1307RTC.html | 2 +- classDS3231RTC-members.html | 2 +- classDS3231RTC.html | 2 +- classDS3232RTC-members.html | 2 +- classDS3232RTC.html | 2 +- classEAX-members.html | 2 +- classEAX.html | 2 +- classEAXCommon-members.html | 2 +- classEAXCommon.html | 2 +- classEEPROM24-members.html | 2 +- classEEPROM24.html | 2 +- classEd25519-members.html | 2 +- classEd25519.html | 2 +- classField-members.html | 2 +- classField.html | 2 +- classForm-members.html | 2 +- classForm.html | 2 +- classGCM-members.html | 2 +- classGCM.html | 2 +- classGCMCommon-members.html | 2 +- classGCMCommon.html | 2 +- classGF128-members.html | 2 +- classGF128.html | 2 +- classGHASH-members.html | 2 +- classGHASH.html | 2 +- classHash-members.html | 2 +- classHash.html | 2 +- classI2CMaster-members.html | 2 +- classI2CMaster.html | 2 +- classIRreceiver-members.html | 2 +- classIRreceiver.html | 2 +- classIntField-members.html | 2 +- classIntField.html | 2 +- classKeccakCore-members.html | 2 +- classKeccakCore.html | 2 +- classLCD-members.html | 2 +- classLCD.html | 2 +- classListField-members.html | 2 +- classListField.html | 2 +- classLoginShell-members.html | 2 +- classLoginShell.html | 2 +- classMelody-members.html | 2 +- classMelody.html | 2 +- classNewHope-members.html | 2 +- classNewHope.html | 2 +- classNoiseSource-members.html | 2 +- classNoiseSource.html | 4 +- classOFB-members.html | 2 +- classOFB.html | 2 +- classOFBCommon-members.html | 2 +- classOFBCommon.html | 2 +- classOMAC-members.html | 2 +- classOMAC.html | 2 +- classP521-members.html | 2 +- classP521.html | 2 +- classPoly1305-members.html | 2 +- classPoly1305.html | 2 +- classRNGClass-members.html | 4 +- classRNGClass.html | 95 +- classRTC-members.html | 2 +- classRTC.html | 2 +- classRTCAlarm-members.html | 2 +- classRTCDate-members.html | 2 +- classRTCTime-members.html | 2 +- classRingOscillatorNoiseSource-members.html | 2 +- classRingOscillatorNoiseSource.html | 4 +- classSHA256-members.html | 2 +- classSHA256.html | 2 +- classSHA3__256-members.html | 2 +- classSHA3__256.html | 2 +- classSHA3__512-members.html | 2 +- classSHA3__512.html | 2 +- classSHA512-members.html | 2 +- classSHA512.html | 2 +- classSHAKE-members.html | 2 +- classSHAKE.html | 2 +- classSHAKE128-members.html | 2 +- classSHAKE128.html | 2 +- classSHAKE256-members.html | 2 +- classSHAKE256.html | 2 +- classShell-members.html | 2 +- classShell.html | 2 +- classShellArguments-members.html | 2 +- classShellArguments.html | 2 +- classSoftI2C-members.html | 2 +- classSoftI2C.html | 2 +- classSpeck-members.html | 2 +- classSpeck.html | 2 +- classSpeckSmall-members.html | 2 +- classSpeckSmall.html | 2 +- classSpeckTiny-members.html | 2 +- classSpeckTiny.html | 2 +- classTerminal-members.html | 2 +- classTerminal.html | 2 +- classTextField-members.html | 2 +- classTextField.html | 2 +- classTimeField-members.html | 2 +- classTimeField.html | 2 +- classTransistorNoiseSource-members.html | 2 +- classTransistorNoiseSource.html | 4 +- classXOF-members.html | 2 +- classXOF.html | 2 +- classXTS-members.html | 2 +- classXTS.html | 2 +- classXTSCommon-members.html | 2 +- classXTSCommon.html | 2 +- classXTSSingleKey-members.html | 2 +- classXTSSingleKey.html | 2 +- classXTSSingleKeyCommon-members.html | 2 +- classXTSSingleKeyCommon.html | 2 +- classes.html | 2 +- crypto-rng-ring_8dox.html | 2 +- crypto-rng_8dox.html | 2 +- crypto.html | 2 +- crypto_8dox.html | 2 +- crypto_rng.html | 14 +- crypto_rng_ring.html | 2 +- dir_1586d320a3b1e622174530fde769cda9.html | 2 +- dir_1de32c476debcefedf4aa8bb43bea551.html | 2 +- dir_3dd03323535933fb3f714c41ff7a94da.html | 2 +- dir_470c03f38356b1f63943514897cb198b.html | 2 +- dir_48f64e79f12bd77ba047e9e436ec978c.html | 2 +- dir_5e87a7229a108582288ef7eda1233dc3.html | 2 +- dir_6591a2127a29f6cea3994dcb5b0596d1.html | 2 +- dir_7e6ab9b017486261fe80629d442521f0.html | 2 +- dir_9a34040863d1190c0e01b23e6b44de01.html | 2 +- dir_bc0718b08fb2015b8e59c47b2805f60c.html | 2 +- dir_be059bf9978ae156837504b1b8a7568c.html | 2 +- dir_e2ce51835550ba18edf07a8311722290.html | 2 +- dir_f34881fcf60f680b800190d5274dfaea.html | 2 +- dir_f9b96888882c2691b8eeaeafd1b9501d.html | 2 +- dmd-demo_8dox.html | 2 +- dmd-running-figure_8dox.html | 2 +- dmd_demo.html | 2 +- dmd_running_figure.html | 2 +- files.html | 2 +- functions.html | 2 +- functions_b.html | 4 +- functions_c.html | 2 +- functions_d.html | 2 +- functions_e.html | 2 +- functions_enum.html | 2 +- functions_eval.html | 2 +- functions_f.html | 2 +- functions_func.html | 2 +- functions_func_b.html | 4 +- functions_func_c.html | 2 +- functions_func_d.html | 2 +- functions_func_e.html | 2 +- functions_func_f.html | 2 +- functions_func_g.html | 2 +- functions_func_h.html | 2 +- functions_func_i.html | 2 +- functions_func_k.html | 2 +- functions_func_l.html | 4 +- functions_func_m.html | 2 +- functions_func_n.html | 2 +- functions_func_o.html | 2 +- functions_func_p.html | 2 +- functions_func_r.html | 2 +- functions_func_s.html | 2 +- functions_func_t.html | 2 +- functions_func_u.html | 2 +- functions_func_v.html | 2 +- functions_func_w.html | 2 +- functions_func_x.html | 2 +- functions_func_~.html | 2 +- functions_g.html | 2 +- functions_h.html | 2 +- functions_i.html | 2 +- functions_k.html | 2 +- functions_l.html | 4 +- functions_m.html | 2 +- functions_n.html | 2 +- functions_o.html | 2 +- functions_p.html | 2 +- functions_r.html | 2 +- functions_rela.html | 2 +- functions_s.html | 8 +- functions_t.html | 2 +- functions_type.html | 2 +- functions_u.html | 2 +- functions_v.html | 2 +- functions_vars.html | 2 +- functions_w.html | 2 +- functions_x.html | 2 +- functions_y.html | 2 +- functions_~.html | 2 +- group__power__save.html | 2 +- hierarchy.html | 2 +- index.html | 2 +- ir-dumpir_8dox.html | 2 +- ir-snake_8dox.html | 2 +- ir_dumpir.html | 2 +- ir_snake.html | 2 +- lcd-form_8dox.html | 2 +- lcd-helloworld_8dox.html | 2 +- lcd_form.html | 2 +- lcd_hello_world.html | 2 +- mainpage_8dox.html | 2 +- modules.html | 2 +- newhope-small_8dox.html | 2 +- newhope_small.html | 2 +- pages.html | 2 +- search/all_1.js | 2 +- search/all_10.js | 2 +- search/all_a.js | 2 +- search/functions_1.js | 2 +- search/functions_a.js | 2 +- shell-serial_8dox.html | 2 +- shell-telnet_8dox.html | 2 +- shell_serial.html | 2 +- shell_telnet.html | 2 +- structNewHopePrivateKey.html | 2 +- structRTCAlarm.html | 2 +- structRTCDate.html | 2 +- structRTCTime.html | 2 +- 419 files changed, 1069 insertions(+), 1020 deletions(-) diff --git a/AES128_8cpp_source.html b/AES128_8cpp_source.html index 9bc0b6ed..9fe100e4 100644 --- a/AES128_8cpp_source.html +++ b/AES128_8cpp_source.html @@ -175,7 +175,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/AES192_8cpp_source.html b/AES192_8cpp_source.html index ca2b3d13..2d904d7e 100644 --- a/AES192_8cpp_source.html +++ b/AES192_8cpp_source.html @@ -175,7 +175,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/AES256_8cpp_source.html b/AES256_8cpp_source.html index 01e98e6c..b9682fb4 100644 --- a/AES256_8cpp_source.html +++ b/AES256_8cpp_source.html @@ -182,7 +182,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/AESCommon_8cpp_source.html b/AESCommon_8cpp_source.html index 26dfbdcc..6daa18a7 100644 --- a/AESCommon_8cpp_source.html +++ b/AESCommon_8cpp_source.html @@ -415,7 +415,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/AES_8h_source.html b/AES_8h_source.html index f8ec2aaf..c328d957 100644 --- a/AES_8h_source.html +++ b/AES_8h_source.html @@ -203,7 +203,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/AuthenticatedCipher_8cpp_source.html b/AuthenticatedCipher_8cpp_source.html index f2799e3a..dd0ccde5 100644 --- a/AuthenticatedCipher_8cpp_source.html +++ b/AuthenticatedCipher_8cpp_source.html @@ -125,7 +125,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/AuthenticatedCipher_8h_source.html b/AuthenticatedCipher_8h_source.html index b6e7d30c..5b9092a3 100644 --- a/AuthenticatedCipher_8h_source.html +++ b/AuthenticatedCipher_8h_source.html @@ -141,7 +141,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/BLAKE2b_8cpp_source.html b/BLAKE2b_8cpp_source.html index 35e61732..3fcac93b 100644 --- a/BLAKE2b_8cpp_source.html +++ b/BLAKE2b_8cpp_source.html @@ -365,7 +365,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/BLAKE2b_8h_source.html b/BLAKE2b_8h_source.html index 4d757b3b..e1a37e22 100644 --- a/BLAKE2b_8h_source.html +++ b/BLAKE2b_8h_source.html @@ -164,7 +164,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/BLAKE2s_8cpp_source.html b/BLAKE2s_8cpp_source.html index ad5441ab..a0dde02c 100644 --- a/BLAKE2s_8cpp_source.html +++ b/BLAKE2s_8cpp_source.html @@ -356,7 +356,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/BLAKE2s_8h_source.html b/BLAKE2s_8h_source.html index 3305324c..479b8919 100644 --- a/BLAKE2s_8h_source.html +++ b/BLAKE2s_8h_source.html @@ -163,7 +163,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/BigNumberUtil_8cpp_source.html b/BigNumberUtil_8cpp_source.html index 9fbf18d5..39169912 100644 --- a/BigNumberUtil_8cpp_source.html +++ b/BigNumberUtil_8cpp_source.html @@ -682,7 +682,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/BigNumberUtil_8h_source.html b/BigNumberUtil_8h_source.html index 8522a2d9..5027270f 100644 --- a/BigNumberUtil_8h_source.html +++ b/BigNumberUtil_8h_source.html @@ -214,7 +214,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Bitmap_8cpp_source.html b/Bitmap_8cpp_source.html index 375846cf..cf88b529 100644 --- a/Bitmap_8cpp_source.html +++ b/Bitmap_8cpp_source.html @@ -694,7 +694,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Bitmap_8h_source.html b/Bitmap_8h_source.html index 6f46984c..ed576d28 100644 --- a/Bitmap_8h_source.html +++ b/Bitmap_8h_source.html @@ -271,7 +271,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/BlinkLED_8cpp_source.html b/BlinkLED_8cpp_source.html index e33d3fd5..04ea742e 100644 --- a/BlinkLED_8cpp_source.html +++ b/BlinkLED_8cpp_source.html @@ -196,7 +196,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/BlinkLED_8h_source.html b/BlinkLED_8h_source.html index 8e469a9f..acf2bb93 100644 --- a/BlinkLED_8h_source.html +++ b/BlinkLED_8h_source.html @@ -157,7 +157,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/BlockCipher_8cpp_source.html b/BlockCipher_8cpp_source.html index 3b30cf96..cf240d21 100644 --- a/BlockCipher_8cpp_source.html +++ b/BlockCipher_8cpp_source.html @@ -125,7 +125,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/BlockCipher_8h_source.html b/BlockCipher_8h_source.html index 3003850a..b2931f55 100644 --- a/BlockCipher_8h_source.html +++ b/BlockCipher_8h_source.html @@ -146,7 +146,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/BoolField_8cpp_source.html b/BoolField_8cpp_source.html index ecb33407..c1ac3839 100644 --- a/BoolField_8cpp_source.html +++ b/BoolField_8cpp_source.html @@ -202,7 +202,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/BoolField_8h_source.html b/BoolField_8h_source.html index 5a491970..68dd35d0 100644 --- a/BoolField_8h_source.html +++ b/BoolField_8h_source.html @@ -160,7 +160,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/CBC_8cpp_source.html b/CBC_8cpp_source.html index 898e349d..fb314670 100644 --- a/CBC_8cpp_source.html +++ b/CBC_8cpp_source.html @@ -208,7 +208,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/CBC_8h_source.html b/CBC_8h_source.html index 7a110e78..4d2fa619 100644 --- a/CBC_8h_source.html +++ b/CBC_8h_source.html @@ -172,7 +172,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/CFB_8cpp_source.html b/CFB_8cpp_source.html index 512c3002..8cdddcd9 100644 --- a/CFB_8cpp_source.html +++ b/CFB_8cpp_source.html @@ -233,7 +233,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/CFB_8h_source.html b/CFB_8h_source.html index d17d1e59..30802f45 100644 --- a/CFB_8h_source.html +++ b/CFB_8h_source.html @@ -171,7 +171,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/CTR_8cpp_source.html b/CTR_8cpp_source.html index 81efd47d..57e92125 100644 --- a/CTR_8cpp_source.html +++ b/CTR_8cpp_source.html @@ -228,7 +228,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/CTR_8h_source.html b/CTR_8h_source.html index 4e44d9a8..04c82148 100644 --- a/CTR_8h_source.html +++ b/CTR_8h_source.html @@ -175,7 +175,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/ChaChaPoly_8cpp_source.html b/ChaChaPoly_8cpp_source.html index 42a0559c..66f131db 100644 --- a/ChaChaPoly_8cpp_source.html +++ b/ChaChaPoly_8cpp_source.html @@ -263,7 +263,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/ChaChaPoly_8h_source.html b/ChaChaPoly_8h_source.html index 0e925c4f..ae5339c4 100644 --- a/ChaChaPoly_8h_source.html +++ b/ChaChaPoly_8h_source.html @@ -173,7 +173,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/ChaCha_8cpp_source.html b/ChaCha_8cpp_source.html index c69511da..4b8768f5 100644 --- a/ChaCha_8cpp_source.html +++ b/ChaCha_8cpp_source.html @@ -311,7 +311,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/ChaCha_8h_source.html b/ChaCha_8h_source.html index d78f80d2..b89912a6 100644 --- a/ChaCha_8h_source.html +++ b/ChaCha_8h_source.html @@ -170,7 +170,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Charlieplex_8cpp_source.html b/Charlieplex_8cpp_source.html index a6eb6e81..e3f23e4e 100644 --- a/Charlieplex_8cpp_source.html +++ b/Charlieplex_8cpp_source.html @@ -232,7 +232,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Charlieplex_8h_source.html b/Charlieplex_8h_source.html index ba8a0dd7..b605fd31 100644 --- a/Charlieplex_8h_source.html +++ b/Charlieplex_8h_source.html @@ -162,7 +162,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/ChaseLEDs_8cpp_source.html b/ChaseLEDs_8cpp_source.html index 87d811f9..b495579e 100644 --- a/ChaseLEDs_8cpp_source.html +++ b/ChaseLEDs_8cpp_source.html @@ -160,7 +160,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/ChaseLEDs_8h_source.html b/ChaseLEDs_8h_source.html index adf129d3..74fcf0b0 100644 --- a/ChaseLEDs_8h_source.html +++ b/ChaseLEDs_8h_source.html @@ -149,7 +149,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Cipher_8cpp_source.html b/Cipher_8cpp_source.html index e22713eb..5abf8077 100644 --- a/Cipher_8cpp_source.html +++ b/Cipher_8cpp_source.html @@ -125,7 +125,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Cipher_8h_source.html b/Cipher_8h_source.html index cc916724..763bffc2 100644 --- a/Cipher_8h_source.html +++ b/Cipher_8h_source.html @@ -148,7 +148,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Crypto_8cpp_source.html b/Crypto_8cpp_source.html index 2166efe1..f1b86534 100644 --- a/Crypto_8cpp_source.html +++ b/Crypto_8cpp_source.html @@ -135,10 +135,30 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
77  }
78  return (bool)((((uint16_t)0x0100) - result) >> 8);
79 }
+
80 
+
96 uint8_t crypto_crc8(uint8_t tag, const void *data, unsigned size)
+
97 {
+
98  const uint8_t *d = (const uint8_t *)data;
+
99  uint8_t crc = 0xFF ^ tag;
+
100  uint8_t bit;
+
101  while (size > 0) {
+
102  crc ^= *d++;
+
103  for (bit = 0; bit < 8; ++bit) {
+
104  // if (crc & 0x80)
+
105  // crc = (crc << 1) ^ 0x1D;
+
106  // else
+
107  // crc = (crc << 1);
+
108  uint8_t generator = (uint8_t)((((int8_t)crc) >> 7) & 0x1D);
+
109  crc = (crc << 1) ^ generator;
+
110  }
+
111  --size;
+
112  }
+
113  return crc;
+
114 }
diff --git a/Crypto_8h_source.html b/Crypto_8h_source.html index ca34904f..c13b0beb 100644 --- a/Crypto_8h_source.html +++ b/Crypto_8h_source.html @@ -130,7 +130,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Curve25519_8cpp_source.html b/Curve25519_8cpp_source.html index f9b010bd..38a87321 100644 --- a/Curve25519_8cpp_source.html +++ b/Curve25519_8cpp_source.html @@ -332,9 +332,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
341  uint8_t result = 0;
342  for (uint8_t posn = 0; posn < 5; ++posn) {
343  const uint8_t *point = points[posn];
-
344  uint8_t check = (pgm_read_byte(point + 31) ^ k[31]) & 0x7F;
+
344  uint8_t check = (pgm_read_byte(&(point[31])) ^ k[31]) & 0x7F;
345  for (uint8_t index = 31; index > 0; --index)
-
346  check |= (pgm_read_byte(point + index - 1) ^ k[index - 1]);
+
346  check |= (pgm_read_byte(&(point[index - 1])) ^ k[index - 1]);
347  result |= (uint8_t)((((uint16_t)0x0100) - check) >> 8);
348  }
349 
@@ -1449,7 +1449,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
1607  clean(y);
1608  return false;
1609 }
-
void rand(uint8_t *data, size_t len)
Generates random bytes into a caller-supplied buffer.
Definition: RNG.cpp:508
+
void rand(uint8_t *data, size_t len)
Generates random bytes into a caller-supplied buffer.
Definition: RNG.cpp:516
static bool eval(uint8_t result[32], const uint8_t s[32], const uint8_t x[32])
Evaluates the raw Curve25519 function.
Definition: Curve25519.cpp:80
static void unpackLE(limb_t *limbs, size_t count, const uint8_t *bytes, size_t len)
Unpacks the little-endian byte representation of a big number into a limb array.
static void packLE(uint8_t *bytes, size_t len, const limb_t *limbs, size_t count)
Packs the little-endian byte representation of a big number into a byte array.
@@ -1458,7 +1458,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Curve25519_8h_source.html b/Curve25519_8h_source.html index c8beb4c2..68d40359 100644 --- a/Curve25519_8h_source.html +++ b/Curve25519_8h_source.html @@ -173,7 +173,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/DMD_8cpp_source.html b/DMD_8cpp_source.html index 604dce6e..f3b28cc3 100644 --- a/DMD_8cpp_source.html +++ b/DMD_8cpp_source.html @@ -456,7 +456,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/DMD_8h_source.html b/DMD_8h_source.html index 096235b9..f9536c25 100644 --- a/DMD_8h_source.html +++ b/DMD_8h_source.html @@ -170,7 +170,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/DS1307RTC_8cpp_source.html b/DS1307RTC_8cpp_source.html index aeb62be3..6ad9b49d 100644 --- a/DS1307RTC_8cpp_source.html +++ b/DS1307RTC_8cpp_source.html @@ -415,7 +415,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/DS1307RTC_8h_source.html b/DS1307RTC_8h_source.html index 938f582b..b36f28bd 100644 --- a/DS1307RTC_8h_source.html +++ b/DS1307RTC_8h_source.html @@ -172,7 +172,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/DS3231RTC_8cpp_source.html b/DS3231RTC_8cpp_source.html index dd0d3cdb..bbbd8b40 100644 --- a/DS3231RTC_8cpp_source.html +++ b/DS3231RTC_8cpp_source.html @@ -657,7 +657,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/DS3231RTC_8h_source.html b/DS3231RTC_8h_source.html index 71616790..c6813829 100644 --- a/DS3231RTC_8h_source.html +++ b/DS3231RTC_8h_source.html @@ -202,7 +202,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/DS3232RTC_8cpp_source.html b/DS3232RTC_8cpp_source.html index 6daaa1bd..c37c99db 100644 --- a/DS3232RTC_8cpp_source.html +++ b/DS3232RTC_8cpp_source.html @@ -575,7 +575,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/DS3232RTC_8h_source.html b/DS3232RTC_8h_source.html index b9dfcd8c..56af5709 100644 --- a/DS3232RTC_8h_source.html +++ b/DS3232RTC_8h_source.html @@ -190,7 +190,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/DejaVuSans9_8h_source.html b/DejaVuSans9_8h_source.html index d4bc123d..dd571f91 100644 --- a/DejaVuSans9_8h_source.html +++ b/DejaVuSans9_8h_source.html @@ -257,7 +257,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/DejaVuSansBold9_8h_source.html b/DejaVuSansBold9_8h_source.html index 107787b7..65fcf746 100644 --- a/DejaVuSansBold9_8h_source.html +++ b/DejaVuSansBold9_8h_source.html @@ -257,7 +257,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/DejaVuSansItalic9_8h_source.html b/DejaVuSansItalic9_8h_source.html index d8c4ac37..c6ed0eac 100644 --- a/DejaVuSansItalic9_8h_source.html +++ b/DejaVuSansItalic9_8h_source.html @@ -257,7 +257,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/EAX_8cpp_source.html b/EAX_8cpp_source.html index 05d1d2d4..a229d61d 100644 --- a/EAX_8cpp_source.html +++ b/EAX_8cpp_source.html @@ -301,7 +301,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/EAX_8h_source.html b/EAX_8h_source.html index d286dfa6..f406e17f 100644 --- a/EAX_8h_source.html +++ b/EAX_8h_source.html @@ -196,7 +196,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/EEPROM24_8cpp_source.html b/EEPROM24_8cpp_source.html index ff396923..48aaeeb4 100644 --- a/EEPROM24_8cpp_source.html +++ b/EEPROM24_8cpp_source.html @@ -282,7 +282,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/EEPROM24_8h_source.html b/EEPROM24_8h_source.html index d6a32236..a9d06731 100644 --- a/EEPROM24_8h_source.html +++ b/EEPROM24_8h_source.html @@ -186,7 +186,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Ed25519_8cpp_source.html b/Ed25519_8cpp_source.html index 4b682c2f..6fae433c 100644 --- a/Ed25519_8cpp_source.html +++ b/Ed25519_8cpp_source.html @@ -556,7 +556,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
static void reduceQuick_P(limb_t *result, const limb_t *x, const limb_t *y, size_t size)
Reduces x modulo y using subtraction where y is in program memory.
static void generatePrivateKey(uint8_t privateKey[32])
Generates a private key for Ed25519 signing operations.
Definition: Ed25519.cpp:243
static limb_t add(limb_t *result, const limb_t *x, const limb_t *y, size_t size)
Adds two big numbers.
-
void rand(uint8_t *data, size_t len)
Generates random bytes into a caller-supplied buffer.
Definition: RNG.cpp:508
+
void rand(uint8_t *data, size_t len)
Generates random bytes into a caller-supplied buffer.
Definition: RNG.cpp:516
static bool verify(const uint8_t signature[64], const uint8_t publicKey[32], const void *message, size_t len)
Verifies a signature using a specific Ed25519 public key.
Definition: Ed25519.cpp:189
SHA-512 hash algorithm.
Definition: SHA512.h:30
void reset()
Resets the hash ready for a new hashing process.
Definition: SHA512.cpp:66
@@ -571,7 +571,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Ed25519_8h_source.html b/Ed25519_8h_source.html index c7814185..695e89d6 100644 --- a/Ed25519_8h_source.html +++ b/Ed25519_8h_source.html @@ -168,7 +168,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Field_8cpp_source.html b/Field_8cpp_source.html index 2801ad5d..7b38ee20 100644 --- a/Field_8cpp_source.html +++ b/Field_8cpp_source.html @@ -196,7 +196,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Field_8h_source.html b/Field_8h_source.html index d8da47aa..c6be444c 100644 --- a/Field_8h_source.html +++ b/Field_8h_source.html @@ -164,7 +164,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Form_8cpp_source.html b/Form_8cpp_source.html index bd1170b6..c951d1b0 100644 --- a/Form_8cpp_source.html +++ b/Form_8cpp_source.html @@ -278,7 +278,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Form_8h_source.html b/Form_8h_source.html index 0ff78206..09f5a97e 100644 --- a/Form_8h_source.html +++ b/Form_8h_source.html @@ -172,7 +172,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/GCM_8cpp_source.html b/GCM_8cpp_source.html index b2fdafd4..92ac4b4e 100644 --- a/GCM_8cpp_source.html +++ b/GCM_8cpp_source.html @@ -353,7 +353,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/GCM_8h_source.html b/GCM_8h_source.html index a5960617..c4c977b4 100644 --- a/GCM_8h_source.html +++ b/GCM_8h_source.html @@ -191,7 +191,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/GF128_8cpp_source.html b/GF128_8cpp_source.html index 056b6dbb..e5e83768 100644 --- a/GF128_8cpp_source.html +++ b/GF128_8cpp_source.html @@ -578,7 +578,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/GF128_8h_source.html b/GF128_8h_source.html index cba4b10b..ed2da754 100644 --- a/GF128_8h_source.html +++ b/GF128_8h_source.html @@ -139,7 +139,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/GHASH_8cpp_source.html b/GHASH_8cpp_source.html index 36c0dfa8..dee96fe8 100644 --- a/GHASH_8cpp_source.html +++ b/GHASH_8cpp_source.html @@ -190,7 +190,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/GHASH_8h_source.html b/GHASH_8h_source.html index c935f5fb..6bc6edd9 100644 --- a/GHASH_8h_source.html +++ b/GHASH_8h_source.html @@ -150,7 +150,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Hash_8cpp_source.html b/Hash_8cpp_source.html index 01134fb7..f60b8eb7 100644 --- a/Hash_8cpp_source.html +++ b/Hash_8cpp_source.html @@ -151,7 +151,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Hash_8h_source.html b/Hash_8h_source.html index c6552015..ca0017cd 100644 --- a/Hash_8h_source.html +++ b/Hash_8h_source.html @@ -154,7 +154,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/I2CMaster_8cpp_source.html b/I2CMaster_8cpp_source.html index 715f7fca..14242c5a 100644 --- a/I2CMaster_8cpp_source.html +++ b/I2CMaster_8cpp_source.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/I2CMaster_8h_source.html b/I2CMaster_8h_source.html index 48db898d..4ff994dc 100644 --- a/I2CMaster_8h_source.html +++ b/I2CMaster_8h_source.html @@ -140,7 +140,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/IRreceiver_8cpp_source.html b/IRreceiver_8cpp_source.html index 8e9fbcd6..6303f572 100644 --- a/IRreceiver_8cpp_source.html +++ b/IRreceiver_8cpp_source.html @@ -261,7 +261,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/IRreceiver_8h_source.html b/IRreceiver_8h_source.html index 738e940b..20a5d8ee 100644 --- a/IRreceiver_8h_source.html +++ b/IRreceiver_8h_source.html @@ -157,7 +157,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/IntField_8cpp_source.html b/IntField_8cpp_source.html index 312b4fe9..0914e883 100644 --- a/IntField_8cpp_source.html +++ b/IntField_8cpp_source.html @@ -208,7 +208,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/IntField_8h_source.html b/IntField_8h_source.html index ab345ff8..aaa8ee5c 100644 --- a/IntField_8h_source.html +++ b/IntField_8h_source.html @@ -173,7 +173,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/KeccakCore_8cpp_source.html b/KeccakCore_8cpp_source.html index af13cdec..11e46130 100644 --- a/KeccakCore_8cpp_source.html +++ b/KeccakCore_8cpp_source.html @@ -1991,7 +1991,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/KeccakCore_8h_source.html b/KeccakCore_8h_source.html index cf74eea9..f6d332dd 100644 --- a/KeccakCore_8h_source.html +++ b/KeccakCore_8h_source.html @@ -167,7 +167,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/LCD_8cpp_source.html b/LCD_8cpp_source.html index ed995a0e..d33a3d1b 100644 --- a/LCD_8cpp_source.html +++ b/LCD_8cpp_source.html @@ -290,7 +290,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/LCD_8h_source.html b/LCD_8h_source.html index 1b9a5765..cc9baaa8 100644 --- a/LCD_8h_source.html +++ b/LCD_8h_source.html @@ -202,7 +202,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/ListField_8cpp_source.html b/ListField_8cpp_source.html index e1c9173d..e05c3172 100644 --- a/ListField_8cpp_source.html +++ b/ListField_8cpp_source.html @@ -221,7 +221,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/ListField_8h_source.html b/ListField_8h_source.html index 18d3b370..f73c0d18 100644 --- a/ListField_8h_source.html +++ b/ListField_8h_source.html @@ -159,7 +159,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/LoginShell_8cpp_source.html b/LoginShell_8cpp_source.html index 4729ef32..db618d37 100644 --- a/LoginShell_8cpp_source.html +++ b/LoginShell_8cpp_source.html @@ -126,7 +126,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/LoginShell_8h_source.html b/LoginShell_8h_source.html index 1fded03b..4fa4fd03 100644 --- a/LoginShell_8h_source.html +++ b/LoginShell_8h_source.html @@ -155,7 +155,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Melody_8cpp_source.html b/Melody_8cpp_source.html index e71b5b5e..03d4392a 100644 --- a/Melody_8cpp_source.html +++ b/Melody_8cpp_source.html @@ -215,7 +215,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Melody_8h_source.html b/Melody_8h_source.html index 6fe83142..c312eb04 100644 --- a/Melody_8h_source.html +++ b/Melody_8h_source.html @@ -258,7 +258,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Mono5x7_8h_source.html b/Mono5x7_8h_source.html index d8dd7594..64f89109 100644 --- a/Mono5x7_8h_source.html +++ b/Mono5x7_8h_source.html @@ -246,7 +246,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/NewHope_8cpp_source.html b/NewHope_8cpp_source.html index c400ed03..28c268bb 100644 --- a/NewHope_8cpp_source.html +++ b/NewHope_8cpp_source.html @@ -1238,7 +1238,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
1334 
1335  clean(&state, sizeof(state));
1336 }
-
void rand(uint8_t *data, size_t len)
Generates random bytes into a caller-supplied buffer.
Definition: RNG.cpp:508
+
void rand(uint8_t *data, size_t len)
Generates random bytes into a caller-supplied buffer.
Definition: RNG.cpp:516
Variant
Describes the variant of the New Hope algorithm to implement.
Definition: NewHope.h:57
SHAKE Extendable-Output Function (XOF) with 128-bit security.
Definition: SHAKE.h:52
static void keygen(uint8_t send[NEWHOPE_SENDABYTES], NewHopePrivateKey &sk, Variant variant=Ref, const uint8_t *random_seed=0)
Generates the key pair for Alice in a New Hope key exchange.
Definition: NewHope.cpp:1014
@@ -1253,7 +1253,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/NewHope_8h_source.html b/NewHope_8h_source.html index c3eea3ee..e267d98a 100644 --- a/NewHope_8h_source.html +++ b/NewHope_8h_source.html @@ -171,7 +171,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/NoiseSource_8cpp_source.html b/NoiseSource_8cpp_source.html index d9ae3cda..775bdece 100644 --- a/NoiseSource_8cpp_source.html +++ b/NoiseSource_8cpp_source.html @@ -134,11 +134,11 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
virtual void added()
Called when the noise source is added to RNG with RNG.addNoiseSource().
Definition: NoiseSource.cpp:95
virtual void output(const uint8_t *data, size_t len, unsigned int credit)
Called from subclasses to output noise to the global random number pool.
virtual ~NoiseSource()
Destroys this random noise source.
Definition: NoiseSource.cpp:43
-
void stir(const uint8_t *data, size_t len, unsigned int credit=0)
Stirs additional entropy data into the random pool.
Definition: RNG.cpp:618
+
void stir(const uint8_t *data, size_t len, unsigned int credit=0)
Stirs additional entropy data into the random pool.
Definition: RNG.cpp:626
diff --git a/NoiseSource_8h_source.html b/NoiseSource_8h_source.html index 86000179..e3c7c9e7 100644 --- a/NoiseSource_8h_source.html +++ b/NoiseSource_8h_source.html @@ -142,7 +142,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/OFB_8cpp_source.html b/OFB_8cpp_source.html index d91aaca1..838fe362 100644 --- a/OFB_8cpp_source.html +++ b/OFB_8cpp_source.html @@ -206,7 +206,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/OFB_8h_source.html b/OFB_8h_source.html index 2ba468cf..1421ffc9 100644 --- a/OFB_8h_source.html +++ b/OFB_8h_source.html @@ -171,7 +171,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/OMAC_8cpp_source.html b/OMAC_8cpp_source.html index 2488b646..8f5d117c 100644 --- a/OMAC_8cpp_source.html +++ b/OMAC_8cpp_source.html @@ -208,7 +208,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/OMAC_8h_source.html b/OMAC_8h_source.html index 1ddac239..c1e07b76 100644 --- a/OMAC_8h_source.html +++ b/OMAC_8h_source.html @@ -152,7 +152,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/P521_8cpp_source.html b/P521_8cpp_source.html index 81f682f8..c67de49d 100644 --- a/P521_8cpp_source.html +++ b/P521_8cpp_source.html @@ -1309,7 +1309,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
static limb_t add(limb_t *result, const limb_t *x, const limb_t *y, size_t size)
Adds two big numbers.
static void generatePrivateKey(uint8_t privateKey[66])
Generates a private key for P-521 signing operations.
Definition: P521.cpp:466
static limb_t sub_P(limb_t *result, const limb_t *x, const limb_t *y, size_t size)
Subtracts one big number from another where one is in program memory.
-
void rand(uint8_t *data, size_t len)
Generates random bytes into a caller-supplied buffer.
Definition: RNG.cpp:508
+
void rand(uint8_t *data, size_t len)
Generates random bytes into a caller-supplied buffer.
Definition: RNG.cpp:516
static bool dh2(const uint8_t k[132], uint8_t f[66])
Performs phase 2 of an ECDH key exchange using P-521.
Definition: P521.cpp:229
Abstract base class for cryptographic hash algorithms.
Definition: Hash.h:29
virtual void finalizeHMAC(const void *key, size_t keyLen, void *hash, size_t hashLen)=0
Finalizes the HMAC hashing process and returns the hash.
@@ -1333,7 +1333,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/P521_8h_source.html b/P521_8h_source.html index fea62787..f11f71a7 100644 --- a/P521_8h_source.html +++ b/P521_8h_source.html @@ -215,7 +215,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Poly1305_8cpp_source.html b/Poly1305_8cpp_source.html index d3b439ef..c686cc7d 100644 --- a/Poly1305_8cpp_source.html +++ b/Poly1305_8cpp_source.html @@ -358,7 +358,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Poly1305_8h_source.html b/Poly1305_8h_source.html index a79edf58..9fe6fd32 100644 --- a/Poly1305_8h_source.html +++ b/Poly1305_8h_source.html @@ -153,7 +153,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/PowerSave_8cpp_source.html b/PowerSave_8cpp_source.html index 293df9b2..370ea20e 100644 --- a/PowerSave_8cpp_source.html +++ b/PowerSave_8cpp_source.html @@ -155,7 +155,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/PowerSave_8h_source.html b/PowerSave_8h_source.html index 0fb8682a..c1279921 100644 --- a/PowerSave_8h_source.html +++ b/PowerSave_8h_source.html @@ -158,7 +158,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/RC5_8h_source.html b/RC5_8h_source.html index 089f4d91..c5e8db50 100644 --- a/RC5_8h_source.html +++ b/RC5_8h_source.html @@ -435,7 +435,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/RNG_8cpp_source.html b/RNG_8cpp_source.html index 2a9ca811..7ea2b855 100644 --- a/RNG_8cpp_source.html +++ b/RNG_8cpp_source.html @@ -125,533 +125,550 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
35 #define RNG_WATCHDOG 1 // Harvest entropy from watchdog jitter.
36 #include <avr/eeprom.h>
37 #include <avr/wdt.h>
-
38 #endif
-
39 #include <string.h>
-
40 
-
134 RNGClass RNG;
-
135 
-
141 // Number of ChaCha hash rounds to use for random number generation.
-
142 #define RNG_ROUNDS 20
-
143 
-
144 // Force a rekey after this many blocks of random data.
-
145 #define RNG_REKEY_BLOCKS 16
-
146 
-
147 // Maximum entropy credit that can be contained in the pool.
-
148 #define RNG_MAX_CREDITS 384
-
149 
-
152 // Tag for 256-bit ChaCha20 keys. This will always appear in the
-
153 // first 16 bytes of the block. The remaining 48 bytes are the seed.
-
154 static const char tagRNG[16] PROGMEM = {
-
155  'e', 'x', 'p', 'a', 'n', 'd', ' ', '3',
-
156  '2', '-', 'b', 'y', 't', 'e', ' ', 'k'
-
157 };
-
158 
-
159 // Initialization seed. This is the ChaCha20 output of hashing
-
160 // "expand 32-byte k" followed by 48 bytes set to the numbers 1 to 48.
-
161 // The ChaCha20 output block is then truncated to the first 48 bytes.
-
162 //
-
163 // This value is intended to start the RNG in a semi-chaotic state if
-
164 // we don't have a previously saved seed in EEPROM.
-
165 static const uint8_t initRNG[48] PROGMEM = {
-
166  0xB0, 0x2A, 0xAE, 0x7D, 0xEE, 0xCB, 0xBB, 0xB1,
-
167  0xFC, 0x03, 0x6F, 0xDD, 0xDC, 0x7D, 0x76, 0x67,
-
168  0x0C, 0xE8, 0x1F, 0x0D, 0xA3, 0xA0, 0xAA, 0x1E,
-
169  0xB0, 0xBD, 0x72, 0x6B, 0x2B, 0x4C, 0x8A, 0x7E,
-
170  0x34, 0xFC, 0x37, 0x60, 0xF4, 0x1E, 0x22, 0xA0,
-
171  0x0B, 0xFB, 0x18, 0x84, 0x60, 0xA5, 0x77, 0x72
-
172 };
-
173 
-
174 #if defined(RNG_WATCHDOG)
-
175 
-
176 // Use jitter between the watchdog timer and the main CPU clock to
-
177 // harvest some entropy on AVR-based systems. This technique comes from:
-
178 //
-
179 // https://sites.google.com/site/astudyofentropy/project-definition/timer-jitter-entropy-sources/entropy-library
-
180 //
-
181 // The watchdog generates entropy very slowly - it can take around 32 seconds
-
182 // to generate 256 bits of entropy credit. This is a "better than nothing"
-
183 // entropy source but a real noise source is definitely recommended.
-
184 
-
185 // Helper macros for specific 32-bit shift counts.
-
186 #define leftShift3(value) ((value) << 3)
-
187 #define leftShift10(value) ((value) << 10)
-
188 #define leftShift15(value) ((value) << 15)
-
189 #define rightShift6(value) ((value) >> 6)
-
190 #define rightShift11(value) ((value) >> 11)
-
191 
-
192 static uint32_t volatile hash = 0;
-
193 static uint8_t volatile outBits = 0;
-
194 
-
195 // Watchdog interrupt handler. This fires off every 16ms. We collect
-
196 // 32 bits and then pass them off onto RNGClass::loop().
-
197 ISR(WDT_vect)
-
198 {
-
199  // Read the low byte of Timer 1. We assume that the timer was
-
200  // initialized by the Arduino startup code for PWM use or that the
-
201  // application is free-running Timer 1 for its own purposes.
-
202  // Timer 0 is used on systems that don't have a Timer 1.
-
203 #if defined(TCNT1L)
-
204  unsigned char value = TCNT1L;
-
205 #elif defined(TCNT0L)
-
206  unsigned char value = TCNT0L;
-
207 #else
-
208  unsigned char value = TCNT0;
-
209 #endif
-
210  // Use Jenkin's one-at-a-time hash function to scatter the entropy a bit.
-
211  // https://en.wikipedia.org/wiki/Jenkins_hash_function
-
212  hash += value;
-
213  hash += leftShift10(hash);
-
214  hash ^= rightShift6(hash);
-
215  ++outBits;
-
216 }
-
217 
-
218 #endif // RNG_WATCHDOG
-
219 
-
230 RNGClass::RNGClass()
-
231  : address(0)
-
232  , credits(0)
-
233  , firstSave(1)
-
234  , timer(0)
-
235  , timeout(3600000UL) // 1 hour in milliseconds
-
236  , count(0)
-
237  , trngPosn(0)
-
238 {
-
239 }
-
240 
-
244 RNGClass::~RNGClass()
+
38 #include <avr/io.h>
+
39 #define RNG_EEPROM_ADDRESS (E2END + 1 - RNGClass::SEED_SIZE)
+
40 #endif
+
41 #include <string.h>
+
42 
+
136 RNGClass RNG;
+
137 
+
146 // Number of ChaCha hash rounds to use for random number generation.
+
147 #define RNG_ROUNDS 20
+
148 
+
149 // Force a rekey after this many blocks of random data.
+
150 #define RNG_REKEY_BLOCKS 16
+
151 
+
152 // Maximum entropy credit that can be contained in the pool.
+
153 #define RNG_MAX_CREDITS 384
+
154 
+
157 // Imported from Crypto.cpp.
+
158 extern uint8_t crypto_crc8(uint8_t tag, const void *data, unsigned size);
+
159 
+
160 // Tag for 256-bit ChaCha20 keys. This will always appear in the
+
161 // first 16 bytes of the block. The remaining 48 bytes are the seed.
+
162 static const char tagRNG[16] PROGMEM = {
+
163  'e', 'x', 'p', 'a', 'n', 'd', ' ', '3',
+
164  '2', '-', 'b', 'y', 't', 'e', ' ', 'k'
+
165 };
+
166 
+
167 // Initialization seed. This is the ChaCha20 output of hashing
+
168 // "expand 32-byte k" followed by 48 bytes set to the numbers 1 to 48.
+
169 // The ChaCha20 output block is then truncated to the first 48 bytes.
+
170 //
+
171 // This value is intended to start the RNG in a semi-chaotic state if
+
172 // we don't have a previously saved seed in EEPROM.
+
173 static const uint8_t initRNG[48] PROGMEM = {
+
174  0xB0, 0x2A, 0xAE, 0x7D, 0xEE, 0xCB, 0xBB, 0xB1,
+
175  0xFC, 0x03, 0x6F, 0xDD, 0xDC, 0x7D, 0x76, 0x67,
+
176  0x0C, 0xE8, 0x1F, 0x0D, 0xA3, 0xA0, 0xAA, 0x1E,
+
177  0xB0, 0xBD, 0x72, 0x6B, 0x2B, 0x4C, 0x8A, 0x7E,
+
178  0x34, 0xFC, 0x37, 0x60, 0xF4, 0x1E, 0x22, 0xA0,
+
179  0x0B, 0xFB, 0x18, 0x84, 0x60, 0xA5, 0x77, 0x72
+
180 };
+
181 
+
182 #if defined(RNG_WATCHDOG)
+
183 
+
184 // Use jitter between the watchdog timer and the main CPU clock to
+
185 // harvest some entropy on AVR-based systems. This technique comes from:
+
186 //
+
187 // https://sites.google.com/site/astudyofentropy/project-definition/timer-jitter-entropy-sources/entropy-library
+
188 //
+
189 // The watchdog generates entropy very slowly - it can take around 32 seconds
+
190 // to generate 256 bits of entropy credit. This is a "better than nothing"
+
191 // entropy source but a real noise source is definitely recommended.
+
192 
+
193 // Helper macros for specific 32-bit shift counts.
+
194 #define leftShift3(value) ((value) << 3)
+
195 #define leftShift10(value) ((value) << 10)
+
196 #define leftShift15(value) ((value) << 15)
+
197 #define rightShift6(value) ((value) >> 6)
+
198 #define rightShift11(value) ((value) >> 11)
+
199 
+
200 static uint32_t volatile hash = 0;
+
201 static uint8_t volatile outBits = 0;
+
202 
+
203 // Watchdog interrupt handler. This fires off every 16ms. We collect
+
204 // 32 bits and then pass them off onto RNGClass::loop().
+
205 ISR(WDT_vect)
+
206 {
+
207  // Read the low byte of Timer 1. We assume that the timer was
+
208  // initialized by the Arduino startup code for PWM use or that the
+
209  // application is free-running Timer 1 for its own purposes.
+
210  // Timer 0 is used on systems that don't have a Timer 1.
+
211 #if defined(TCNT1L)
+
212  unsigned char value = TCNT1L;
+
213 #elif defined(TCNT0L)
+
214  unsigned char value = TCNT0L;
+
215 #else
+
216  unsigned char value = TCNT0;
+
217 #endif
+
218  // Use Jenkin's one-at-a-time hash function to scatter the entropy a bit.
+
219  // https://en.wikipedia.org/wiki/Jenkins_hash_function
+
220  hash += value;
+
221  hash += leftShift10(hash);
+
222  hash ^= rightShift6(hash);
+
223  ++outBits;
+
224 }
+
225 
+
226 #endif // RNG_WATCHDOG
+
227 
+
238 RNGClass::RNGClass()
+
239  : credits(0)
+
240  , firstSave(1)
+
241  , timer(0)
+
242  , timeout(3600000UL) // 1 hour in milliseconds
+
243  , count(0)
+
244  , trngPosn(0)
245 {
-
246 #if defined(RNG_DUE_TRNG)
-
247  // Disable the TRNG in the Arduino Due.
-
248  REG_TRNG_CR = TRNG_CR_KEY(0x524E47);
-
249 #endif
-
250 #if defined(RNG_WATCHDOG)
-
251  // Disable interrupts and reset the watchdog.
-
252  cli();
-
253  wdt_reset();
-
254 
-
255  // Clear the "reset due to watchdog" flag.
-
256  MCUSR &= ~(1 << WDRF);
-
257 
-
258  // Disable the watchdog.
-
259  _WD_CONTROL_REG |= (1 << _WD_CHANGE_BIT) | (1 << WDE);
-
260  _WD_CONTROL_REG = 0;
+
246 }
+
247 
+
251 RNGClass::~RNGClass()
+
252 {
+
253 #if defined(RNG_DUE_TRNG)
+
254  // Disable the TRNG in the Arduino Due.
+
255  REG_TRNG_CR = TRNG_CR_KEY(0x524E47);
+
256 #endif
+
257 #if defined(RNG_WATCHDOG)
+
258  // Disable interrupts and reset the watchdog.
+
259  cli();
+
260  wdt_reset();
261 
-
262  // Re-enable interrupts. The watchdog should be stopped.
-
263  sei();
-
264 #endif
-
265  clean(block);
-
266  clean(stream);
-
267 }
+
262  // Clear the "reset due to watchdog" flag.
+
263  MCUSR &= ~(1 << WDRF);
+
264 
+
265  // Disable the watchdog.
+
266  _WD_CONTROL_REG |= (1 << _WD_CHANGE_BIT) | (1 << WDE);
+
267  _WD_CONTROL_REG = 0;
268 
-
269 #if defined(RNG_DUE_TRNG)
-
270 
-
271 // Find the flash memory of interest. Allow for the possibility
-
272 // of other SAM-based Arduino variants in the future.
-
273 #if defined(IFLASH1_ADDR)
-
274 #define RNG_FLASH_ADDR IFLASH1_ADDR
-
275 #define RNG_FLASH_SIZE IFLASH1_SIZE
-
276 #define RNG_FLASH_PAGE_SIZE IFLASH1_PAGE_SIZE
-
277 #define RNG_EFC EFC1
-
278 #elif defined(IFLASH0_ADDR)
-
279 #define RNG_FLASH_ADDR IFLASH0_ADDR
-
280 #define RNG_FLASH_SIZE IFLASH0_SIZE
-
281 #define RNG_FLASH_PAGE_SIZE IFLASH0_PAGE_SIZE
-
282 #define RNG_EFC EFC0
-
283 #else
-
284 #define RNG_FLASH_ADDR IFLASH_ADDR
-
285 #define RNG_FLASH_SIZE IFLASH_SIZE
-
286 #define RNG_FLASH_PAGE_SIZE IFLASH_PAGE_SIZE
-
287 #define RNG_EFC EFC
-
288 #endif
-
289 
-
290 // Address of the flash page to use for saving the seed on the Due.
-
291 // All SAM variants have a page size of 256 bytes or greater so there is
-
292 // plenty of room for the 48 byte seed in the last page of flash memory.
-
293 #define RNG_SEED_ADDR (RNG_FLASH_ADDR + RNG_FLASH_SIZE - RNG_FLASH_PAGE_SIZE)
-
294 #define RNG_SEED_PAGE ((RNG_FLASH_SIZE / RNG_FLASH_PAGE_SIZE) - 1)
-
295 
-
296 // Stir in the unique identifier for the Arduino Due's CPU.
-
297 // This function must be in RAM because programs running out of
-
298 // flash memory are not allowed to access the unique identifier.
-
299 // Info from: http://forum.arduino.cc/index.php?topic=289190.0
-
300 __attribute__((section(".ramfunc")))
-
301 static void stirUniqueIdentifier(void)
-
302 {
-
303  uint32_t id[4];
-
304 
-
305  // Start Read Unique Identifier.
-
306  RNG_EFC->EEFC_FCR = (0x5A << 24) | EFC_FCMD_STUI;
-
307  while ((RNG_EFC->EEFC_FSR & EEFC_FSR_FRDY) != 0)
-
308  ; // do nothing until FRDY falls.
-
309 
-
310  // Read the identifier.
-
311  id[0] = *((const uint32_t *)RNG_FLASH_ADDR);
-
312  id[1] = *((const uint32_t *)(RNG_FLASH_ADDR + 4));
-
313  id[2] = *((const uint32_t *)(RNG_FLASH_ADDR + 8));
-
314  id[3] = *((const uint32_t *)(RNG_FLASH_ADDR + 12));
-
315 
-
316  // Stop Read Unique Identifier.
-
317  RNG_EFC->EEFC_FCR = (0x5A << 24) | EFC_FCMD_SPUI;
-
318  while ((RNG_EFC->EEFC_FSR & EEFC_FSR_FRDY) == 0)
-
319  ; // do nothing until FRDY rises.
-
320 
-
321  // Stir the unique identifier into the entropy pool.
-
322  RNG.stir((uint8_t *)id, sizeof(id));
-
323 }
-
324 
-
325 // Erases the flash page containing the seed and then writes the new seed.
-
326 // It is assumed the seed has already been loaded into the latch registers.
-
327 __attribute__((section(".ramfunc")))
-
328 static void eraseAndWriteSeed()
-
329 {
-
330  // Execute the "Erase and Write Page" command.
-
331  RNG_EFC->EEFC_FCR = (0x5A << 24) | (RNG_SEED_PAGE << 8) | EFC_FCMD_EWP;
-
332 
-
333  // Wait for the FRDY bit to be raised.
-
334  while ((RNG_EFC->EEFC_FSR & EEFC_FSR_FRDY) == 0)
-
335  ; // do nothing until FRDY rises.
-
336 }
-
337 
-
338 #endif
-
339 
-
359 void RNGClass::begin(const char *tag, int eepromAddress)
-
360 {
-
361  // Save the EEPROM address for use by save().
-
362  address = eepromAddress;
-
363 
-
364  // Initialize the ChaCha20 input block from the saved seed.
-
365  memcpy_P(block, tagRNG, sizeof(tagRNG));
-
366  memcpy_P(block + 4, initRNG, sizeof(initRNG));
-
367 #if defined(RNG_EEPROM)
-
368  if (eeprom_read_byte((const uint8_t *)address) == 'S') {
-
369  // We have a saved seed: XOR it with the initialization block.
-
370  for (int posn = 0; posn < 12; ++posn) {
-
371  block[posn + 4] ^=
-
372  eeprom_read_dword((const uint32_t *)(address + posn * 4 + 1));
-
373  }
+
269  // Re-enable interrupts. The watchdog should be stopped.
+
270  sei();
+
271 #endif
+
272  clean(block);
+
273  clean(stream);
+
274 }
+
275 
+
276 #if defined(RNG_DUE_TRNG)
+
277 
+
278 // Find the flash memory of interest. Allow for the possibility
+
279 // of other SAM-based Arduino variants in the future.
+
280 #if defined(IFLASH1_ADDR)
+
281 #define RNG_FLASH_ADDR IFLASH1_ADDR
+
282 #define RNG_FLASH_SIZE IFLASH1_SIZE
+
283 #define RNG_FLASH_PAGE_SIZE IFLASH1_PAGE_SIZE
+
284 #define RNG_EFC EFC1
+
285 #elif defined(IFLASH0_ADDR)
+
286 #define RNG_FLASH_ADDR IFLASH0_ADDR
+
287 #define RNG_FLASH_SIZE IFLASH0_SIZE
+
288 #define RNG_FLASH_PAGE_SIZE IFLASH0_PAGE_SIZE
+
289 #define RNG_EFC EFC0
+
290 #else
+
291 #define RNG_FLASH_ADDR IFLASH_ADDR
+
292 #define RNG_FLASH_SIZE IFLASH_SIZE
+
293 #define RNG_FLASH_PAGE_SIZE IFLASH_PAGE_SIZE
+
294 #define RNG_EFC EFC
+
295 #endif
+
296 
+
297 // Address of the flash page to use for saving the seed on the Due.
+
298 // All SAM variants have a page size of 256 bytes or greater so there is
+
299 // plenty of room for the 48 byte seed in the last page of flash memory.
+
300 #define RNG_SEED_ADDR (RNG_FLASH_ADDR + RNG_FLASH_SIZE - RNG_FLASH_PAGE_SIZE)
+
301 #define RNG_SEED_PAGE ((RNG_FLASH_SIZE / RNG_FLASH_PAGE_SIZE) - 1)
+
302 
+
303 // Stir in the unique identifier for the Arduino Due's CPU.
+
304 // This function must be in RAM because programs running out of
+
305 // flash memory are not allowed to access the unique identifier.
+
306 // Info from: http://forum.arduino.cc/index.php?topic=289190.0
+
307 __attribute__((section(".ramfunc")))
+
308 static void stirUniqueIdentifier(void)
+
309 {
+
310  uint32_t id[4];
+
311 
+
312  // Start Read Unique Identifier.
+
313  RNG_EFC->EEFC_FCR = (0x5A << 24) | EFC_FCMD_STUI;
+
314  while ((RNG_EFC->EEFC_FSR & EEFC_FSR_FRDY) != 0)
+
315  ; // do nothing until FRDY falls.
+
316 
+
317  // Read the identifier.
+
318  id[0] = *((const uint32_t *)RNG_FLASH_ADDR);
+
319  id[1] = *((const uint32_t *)(RNG_FLASH_ADDR + 4));
+
320  id[2] = *((const uint32_t *)(RNG_FLASH_ADDR + 8));
+
321  id[3] = *((const uint32_t *)(RNG_FLASH_ADDR + 12));
+
322 
+
323  // Stop Read Unique Identifier.
+
324  RNG_EFC->EEFC_FCR = (0x5A << 24) | EFC_FCMD_SPUI;
+
325  while ((RNG_EFC->EEFC_FSR & EEFC_FSR_FRDY) == 0)
+
326  ; // do nothing until FRDY rises.
+
327 
+
328  // Stir the unique identifier into the entropy pool.
+
329  RNG.stir((uint8_t *)id, sizeof(id));
+
330 }
+
331 
+
332 // Erases the flash page containing the seed and then writes the new seed.
+
333 // It is assumed the seed has already been loaded into the latch registers.
+
334 __attribute__((section(".ramfunc")))
+
335 static void eraseAndWriteSeed()
+
336 {
+
337  // Execute the "Erase and Write Page" command.
+
338  RNG_EFC->EEFC_FCR = (0x5A << 24) | (RNG_SEED_PAGE << 8) | EFC_FCMD_EWP;
+
339 
+
340  // Wait for the FRDY bit to be raised.
+
341  while ((RNG_EFC->EEFC_FSR & EEFC_FSR_FRDY) == 0)
+
342  ; // do nothing until FRDY rises.
+
343 }
+
344 
+
345 #endif
+
346 
+
360 void RNGClass::begin(const char *tag)
+
361 {
+
362  // Initialize the ChaCha20 input block from the saved seed.
+
363  memcpy_P(block, tagRNG, sizeof(tagRNG));
+
364  memcpy_P(block + 4, initRNG, sizeof(initRNG));
+
365 #if defined(RNG_EEPROM)
+
366  int address = RNG_EEPROM_ADDRESS;
+
367  eeprom_read_block(stream, (const void *)address, SEED_SIZE);
+
368  if (crypto_crc8('S', stream, SEED_SIZE - 1) ==
+
369  ((const uint8_t *)stream)[SEED_SIZE - 1]) {
+
370  // We have a saved seed: XOR it with the initialization block.
+
371  // Note: the CRC-8 value is included. No point throwing it away.
+
372  for (int posn = 0; posn < 12; ++posn)
+
373  block[posn + 4] ^= stream[posn];
374  }
375 #elif defined(RNG_DUE_TRNG)
376  // Do we have a seed saved in the last page of flash memory on the Due?
377  int posn, counter;
-
378  if (((const uint32_t *)RNG_SEED_ADDR)[0] == 'S') {
-
379  // XOR the saved seed with the initialization block.
-
380  for (posn = 0; posn < 12; ++posn)
-
381  block[posn + 4] ^= ((const uint32_t *)RNG_SEED_ADDR)[posn + 1];
-
382  }
-
383 
-
384  // If the device has just been reprogrammed, there will be no saved seed.
-
385  // XOR the initialization block with some output from the CPU's TRNG
-
386  // to permute the state in a first boot situation after reprogramming.
-
387  pmc_enable_periph_clk(ID_TRNG);
-
388  REG_TRNG_CR = TRNG_CR_KEY(0x524E47) | TRNG_CR_ENABLE;
-
389  REG_TRNG_IDR = TRNG_IDR_DATRDY; // Disable interrupts - we will poll.
-
390  for (posn = 0; posn < 12; ++posn) {
-
391  // According to the documentation the TRNG should produce a new
-
392  // 32-bit random value every 84 clock cycles. If it still hasn't
-
393  // produced a value after 200 iterations, then assume that the
-
394  // TRNG is not producing output and stop.
-
395  for (counter = 0; counter < 200; ++counter) {
-
396  if ((REG_TRNG_ISR & TRNG_ISR_DATRDY) != 0)
-
397  break;
-
398  }
-
399  if (counter >= 200)
-
400  break;
-
401  block[posn + 4] ^= REG_TRNG_ODATA;
-
402  }
-
403 #endif
-
404 
-
405  // No entropy credits for the saved seed.
-
406  credits = 0;
-
407 
-
408  // Trigger an automatic save once the entropy credits max out.
-
409  firstSave = 1;
-
410 
-
411  // Rekey the random number generator immediately.
-
412  rekey();
-
413 
-
414  // Stir in the supplied tag data but don't credit any entropy to it.
-
415  if (tag)
-
416  stir((const uint8_t *)tag, strlen(tag));
-
417 
-
418 #if defined(RNG_DUE_TRNG)
-
419  // Stir in the unique identifier for the CPU so that different
-
420  // devices will give different outputs even without seeding.
-
421  stirUniqueIdentifier();
-
422 #endif
-
423 
-
424 #if defined(RNG_WATCHDOG)
-
425  // Disable interrupts and reset the watchdog.
-
426  cli();
-
427  wdt_reset();
-
428 
-
429  // Clear the "reset due to watchdog" flag.
-
430  MCUSR &= ~(1 << WDRF);
-
431 
-
432  // Enable the watchdog with the smallest duration (16ms)
-
433  // and interrupt-only mode.
-
434  _WD_CONTROL_REG |= (1 << _WD_CHANGE_BIT) | (1 << WDE);
-
435  _WD_CONTROL_REG = (1 << WDIE);
+
378  if (crypto_crc8('S', ((const uint32_t *)RNG_SEED_ADDR) + 1, SEED_SIZE)
+
379  == ((const uint32_t *)RNG_SEED_ADDR)[0]) {
+
380  // XOR the saved seed with the initialization block.
+
381  for (posn = 0; posn < 12; ++posn)
+
382  block[posn + 4] ^= ((const uint32_t *)RNG_SEED_ADDR)[posn + 1];
+
383  }
+
384 
+
385  // If the device has just been reprogrammed, there will be no saved seed.
+
386  // XOR the initialization block with some output from the CPU's TRNG
+
387  // to permute the state in a first boot situation after reprogramming.
+
388  pmc_enable_periph_clk(ID_TRNG);
+
389  REG_TRNG_CR = TRNG_CR_KEY(0x524E47) | TRNG_CR_ENABLE;
+
390  REG_TRNG_IDR = TRNG_IDR_DATRDY; // Disable interrupts - we will poll.
+
391  for (posn = 0; posn < 12; ++posn) {
+
392  // According to the documentation the TRNG should produce a new
+
393  // 32-bit random value every 84 clock cycles. If it still hasn't
+
394  // produced a value after 200 iterations, then assume that the
+
395  // TRNG is not producing output and stop.
+
396  for (counter = 0; counter < 200; ++counter) {
+
397  if ((REG_TRNG_ISR & TRNG_ISR_DATRDY) != 0)
+
398  break;
+
399  }
+
400  if (counter >= 200)
+
401  break;
+
402  block[posn + 4] ^= REG_TRNG_ODATA;
+
403  }
+
404 #endif
+
405 
+
406  // No entropy credits for the saved seed.
+
407  credits = 0;
+
408 
+
409  // Trigger an automatic save once the entropy credits max out.
+
410  firstSave = 1;
+
411 
+
412  // Rekey the random number generator immediately.
+
413  rekey();
+
414 
+
415  // Stir in the supplied tag data but don't credit any entropy to it.
+
416  if (tag)
+
417  stir((const uint8_t *)tag, strlen(tag));
+
418 
+
419 #if defined(RNG_DUE_TRNG)
+
420  // Stir in the unique identifier for the CPU so that different
+
421  // devices will give different outputs even without seeding.
+
422  stirUniqueIdentifier();
+
423 #else
+
424  // AVR devices don't have anything like a serial number so it is
+
425  // difficult to make every device unique. Use the compilation
+
426  // time and date to provide a little randomness across applications
+
427  // if not across devices running the same pre-compiled application.
+
428  tag = __TIME__ __DATE__;
+
429  stir((const uint8_t *)tag, strlen(tag));
+
430 #endif
+
431 
+
432 #if defined(RNG_WATCHDOG)
+
433  // Disable interrupts and reset the watchdog.
+
434  cli();
+
435  wdt_reset();
436 
-
437  // Re-enable interrupts. The watchdog should be running.
-
438  sei();
-
439 #endif
-
440 
-
441  // Re-save the seed to obliterate the previous value and to ensure
-
442  // that if the system is reset without a call to save() that we won't
-
443  // accidentally generate the same sequence of random data again.
-
444  save();
-
445 }
-
446 
-
459 void RNGClass::addNoiseSource(NoiseSource &source)
-
460 {
-
461  #define MAX_NOISE_SOURCES (sizeof(noiseSources) / sizeof(noiseSources[0]))
-
462  if (count < MAX_NOISE_SOURCES) {
-
463  noiseSources[count++] = &source;
-
464  source.added();
-
465  }
-
466 }
-
467 
-
484 void RNGClass::setAutoSaveTime(uint16_t minutes)
-
485 {
-
486  if (!minutes)
-
487  minutes = 1; // Just in case.
-
488  timeout = ((uint32_t)minutes) * 60000U;
-
489 }
-
490 
-
508 void RNGClass::rand(uint8_t *data, size_t len)
-
509 {
-
510  // Decrease the amount of entropy in the pool.
-
511  if (len > (credits / 8))
-
512  credits = 0;
-
513  else
-
514  credits -= len * 8;
-
515 
-
516  // Generate the random data.
-
517  uint8_t count = 0;
-
518  while (len > 0) {
-
519  // Force a rekey if we have generated too many blocks in this request.
-
520  if (count >= RNG_REKEY_BLOCKS) {
-
521  rekey();
-
522  count = 1;
-
523  } else {
-
524  ++count;
-
525  }
-
526 
-
527  // Increment the low counter word and generate a new keystream block.
-
528  ++(block[12]);
-
529  ChaCha::hashCore(stream, block, RNG_ROUNDS);
-
530 
-
531  // Copy the data to the return buffer.
-
532  if (len < 64) {
-
533  memcpy(data, stream, len);
-
534  break;
-
535  } else {
-
536  memcpy(data, stream, 64);
-
537  data += 64;
-
538  len -= 64;
-
539  }
-
540  }
-
541 
-
542  // Force a rekey after every request.
-
543  rekey();
-
544 }
-
545 
-
585 bool RNGClass::available(size_t len) const
-
586 {
-
587  if (len >= (RNG_MAX_CREDITS / 8))
-
588  return credits >= RNG_MAX_CREDITS;
-
589  else
-
590  return len <= (credits / 8);
-
591 }
-
592 
-
618 void RNGClass::stir(const uint8_t *data, size_t len, unsigned int credit)
-
619 {
-
620  // Increase the entropy credit.
-
621  if ((credit / 8) >= len && len)
-
622  credit = len * 8;
-
623  if ((RNG_MAX_CREDITS - credits) > credit)
-
624  credits += credit;
-
625  else
-
626  credits = RNG_MAX_CREDITS;
-
627 
-
628  // Process the supplied input data.
-
629  if (len > 0) {
-
630  // XOR the data with the ChaCha input block in 48 byte
-
631  // chunks and rekey the ChaCha cipher for each chunk to mix
-
632  // the data in. This should scatter any "true entropy" in
-
633  // the input across the entire block.
-
634  while (len > 0) {
-
635  size_t templen = len;
-
636  if (templen > 48)
-
637  templen = 48;
-
638  uint8_t *output = ((uint8_t *)block) + 16;
-
639  len -= templen;
-
640  while (templen > 0) {
-
641  *output++ ^= *data++;
-
642  --templen;
-
643  }
-
644  rekey();
-
645  }
-
646  } else {
-
647  // There was no input data, so just force a rekey so we
-
648  // get some mixing of the state even without new data.
-
649  rekey();
-
650  }
-
651 
-
652  // Save if this is the first time we have reached max entropy.
-
653  // This provides some protection if the system is powered off before
-
654  // the first auto-save timeout occurs.
-
655  if (firstSave && credits >= RNG_MAX_CREDITS) {
-
656  firstSave = 0;
-
657  save();
+
437  // Clear the "reset due to watchdog" flag.
+
438  MCUSR &= ~(1 << WDRF);
+
439 
+
440  // Enable the watchdog with the smallest duration (16ms)
+
441  // and interrupt-only mode.
+
442  _WD_CONTROL_REG |= (1 << _WD_CHANGE_BIT) | (1 << WDE);
+
443  _WD_CONTROL_REG = (1 << WDIE);
+
444 
+
445  // Re-enable interrupts. The watchdog should be running.
+
446  sei();
+
447 #endif
+
448 
+
449  // Re-save the seed to obliterate the previous value and to ensure
+
450  // that if the system is reset without a call to save() that we won't
+
451  // accidentally generate the same sequence of random data again.
+
452  save();
+
453 }
+
454 
+
467 void RNGClass::addNoiseSource(NoiseSource &source)
+
468 {
+
469  #define MAX_NOISE_SOURCES (sizeof(noiseSources) / sizeof(noiseSources[0]))
+
470  if (count < MAX_NOISE_SOURCES) {
+
471  noiseSources[count++] = &source;
+
472  source.added();
+
473  }
+
474 }
+
475 
+
492 void RNGClass::setAutoSaveTime(uint16_t minutes)
+
493 {
+
494  if (!minutes)
+
495  minutes = 1; // Just in case.
+
496  timeout = ((uint32_t)minutes) * 60000U;
+
497 }
+
498 
+
516 void RNGClass::rand(uint8_t *data, size_t len)
+
517 {
+
518  // Decrease the amount of entropy in the pool.
+
519  if (len > (credits / 8))
+
520  credits = 0;
+
521  else
+
522  credits -= len * 8;
+
523 
+
524  // Generate the random data.
+
525  uint8_t count = 0;
+
526  while (len > 0) {
+
527  // Force a rekey if we have generated too many blocks in this request.
+
528  if (count >= RNG_REKEY_BLOCKS) {
+
529  rekey();
+
530  count = 1;
+
531  } else {
+
532  ++count;
+
533  }
+
534 
+
535  // Increment the low counter word and generate a new keystream block.
+
536  ++(block[12]);
+
537  ChaCha::hashCore(stream, block, RNG_ROUNDS);
+
538 
+
539  // Copy the data to the return buffer.
+
540  if (len < 64) {
+
541  memcpy(data, stream, len);
+
542  break;
+
543  } else {
+
544  memcpy(data, stream, 64);
+
545  data += 64;
+
546  len -= 64;
+
547  }
+
548  }
+
549 
+
550  // Force a rekey after every request.
+
551  rekey();
+
552 }
+
553 
+
593 bool RNGClass::available(size_t len) const
+
594 {
+
595  if (len >= (RNG_MAX_CREDITS / 8))
+
596  return credits >= RNG_MAX_CREDITS;
+
597  else
+
598  return len <= (credits / 8);
+
599 }
+
600 
+
626 void RNGClass::stir(const uint8_t *data, size_t len, unsigned int credit)
+
627 {
+
628  // Increase the entropy credit.
+
629  if ((credit / 8) >= len && len)
+
630  credit = len * 8;
+
631  if ((RNG_MAX_CREDITS - credits) > credit)
+
632  credits += credit;
+
633  else
+
634  credits = RNG_MAX_CREDITS;
+
635 
+
636  // Process the supplied input data.
+
637  if (len > 0) {
+
638  // XOR the data with the ChaCha input block in 48 byte
+
639  // chunks and rekey the ChaCha cipher for each chunk to mix
+
640  // the data in. This should scatter any "true entropy" in
+
641  // the input across the entire block.
+
642  while (len > 0) {
+
643  size_t templen = len;
+
644  if (templen > 48)
+
645  templen = 48;
+
646  uint8_t *output = ((uint8_t *)block) + 16;
+
647  len -= templen;
+
648  while (templen > 0) {
+
649  *output++ ^= *data++;
+
650  --templen;
+
651  }
+
652  rekey();
+
653  }
+
654  } else {
+
655  // There was no input data, so just force a rekey so we
+
656  // get some mixing of the state even without new data.
+
657  rekey();
658  }
-
659 }
-
660 
-
687 void RNGClass::save()
-
688 {
-
689  // Generate random data from the current state and save
-
690  // that as the seed. Then force a rekey.
-
691  ++(block[12]);
-
692  ChaCha::hashCore(stream, block, RNG_ROUNDS);
-
693 #if defined(RNG_EEPROM)
-
694  eeprom_write_block(stream, (void *)(address + 1), 48);
-
695  eeprom_update_byte((uint8_t *)address, 'S');
-
696 #elif defined(RNG_DUE_TRNG)
-
697  unsigned posn;
-
698  ((uint32_t *)(RNG_SEED_ADDR))[0] = 'S';
-
699  for (posn = 0; posn < 12; ++posn)
-
700  ((uint32_t *)(RNG_SEED_ADDR))[posn + 1] = stream[posn];
-
701  for (posn = 13; posn < (RNG_FLASH_PAGE_SIZE / 4); ++posn)
-
702  ((uint32_t *)(RNG_SEED_ADDR))[posn + 13] = 0xFFFFFFFF;
-
703  eraseAndWriteSeed();
-
704 #endif
-
705  rekey();
-
706  timer = millis();
-
707 }
-
708 
-
715 void RNGClass::loop()
-
716 {
-
717  // Stir in the entropy from all registered noise sources.
-
718  for (uint8_t posn = 0; posn < count; ++posn)
-
719  noiseSources[posn]->stir();
-
720 
-
721 #if defined(RNG_DUE_TRNG)
-
722  // If there is data available from the Arudino Due's TRNG, then XOR
-
723  // it with the state block and increase the entropy credit. We don't
-
724  // call stir() yet because that will seriously slow down the system
-
725  // given how fast the TRNG is. Instead we save up the XOR'ed TRNG
-
726  // data until the next rand() call and then hash it to generate the
-
727  // desired output.
-
728  //
-
729  // The CPU documentation claims that the TRNG output is very good so
-
730  // this should only make the pool more and more random as time goes on.
-
731  // However there is a risk that the CPU manufacturer was pressured by
-
732  // government or intelligence agencies to insert a back door that
-
733  // generates predictable output. Or the manufacturer was overly
-
734  // optimistic about their TRNG design and it is actually flawed in a
-
735  // way they don't realise.
-
736  //
-
737  // If you are concerned about such threats, then make sure to mix in
-
738  // data from other noise sources. By hashing together the TRNG with
-
739  // the other noise data, rand() should produce unpredictable data even
-
740  // if one of the sources is actually predictable.
-
741  if ((REG_TRNG_ISR & TRNG_ISR_DATRDY) != 0) {
-
742  block[4 + trngPosn] ^= REG_TRNG_ODATA;
-
743  if (++trngPosn >= 12)
-
744  trngPosn = 0;
-
745  if (credits < RNG_MAX_CREDITS) {
-
746  // Credit 1 bit of entropy for the word. The TRNG should be
-
747  // better than this but it is so fast that we want to collect
-
748  // up more data before passing it to the application.
-
749  ++credits;
-
750  }
-
751  }
-
752 #elif defined(RNG_WATCHDOG)
-
753  // Read the 32 bit buffer from the WDT interrupt.
-
754  cli();
-
755  if (outBits >= 32) {
-
756  uint32_t value = hash;
-
757  hash = 0;
-
758  outBits = 0;
-
759  sei();
-
760 
-
761  // Final steps of the Jenkin's one-at-a-time hash function.
-
762  // https://en.wikipedia.org/wiki/Jenkins_hash_function
-
763  value += leftShift3(value);
-
764  value ^= rightShift11(value);
-
765  value += leftShift15(value);
-
766 
-
767  // XOR the word with the state. Stir once we accumulate 48 bytes,
-
768  // which happens about once every 6.4 seconds.
-
769  block[4 + trngPosn] ^= value;
-
770  if (++trngPosn >= 12) {
-
771  trngPosn = 0;
-
772 
-
773  // Credit 1 bit of entropy for each byte of input. It can take
-
774  // between 30 and 40 seconds to accumulate 256 bits of credit.
-
775  stir(0, 0, 48);
-
776  }
-
777  } else {
-
778  sei();
-
779  }
-
780 #endif
-
781 
-
782  // Save the seed if the auto-save timer has expired.
-
783  if ((millis() - timer) >= timeout)
-
784  save();
-
785 }
-
786 
-
806 void RNGClass::destroy()
-
807 {
-
808  clean(block);
-
809  clean(stream);
-
810 #if defined(RNG_EEPROM)
-
811  for (int posn = 0; posn < SEED_SIZE; ++posn)
-
812  eeprom_write_byte((uint8_t *)(address + posn), 0xFF);
-
813 #elif defined(RNG_DUE_TRNG)
-
814  for (unsigned posn = 0; posn < (RNG_FLASH_PAGE_SIZE / 4); ++posn)
-
815  ((uint32_t *)(RNG_SEED_ADDR))[posn] = 0xFFFFFFFF;
-
816  eraseAndWriteSeed();
-
817 #endif
-
818 }
-
819 
-
823 void RNGClass::rekey()
-
824 {
-
825  // Rekey the cipher for the next request by generating a new block.
-
826  // This is intended to make it difficult to wind the random number
-
827  // backwards if the state is captured later. The first 16 bytes of
-
828  // "block" remain set to "tagRNG".
-
829  ++(block[12]);
-
830  ChaCha::hashCore(stream, block, RNG_ROUNDS);
-
831  memcpy(block + 4, stream, 48);
-
832 
-
833  // Permute the high word of the counter using the system microsecond
-
834  // counter to introduce a little bit of non-stir randomness for each
-
835  // request. Note: If random data is requested on a predictable schedule
-
836  // then this may not help very much. It is still necessary to stir in
-
837  // high quality entropy data on a regular basis using stir().
-
838  block[13] ^= micros();
-
839 }
-
void save()
Saves the random seed to EEPROM.
Definition: RNG.cpp:687
-
void rand(uint8_t *data, size_t len)
Generates random bytes into a caller-supplied buffer.
Definition: RNG.cpp:508
-
void begin(const char *tag, int eepromAddress)
Initializes the random number generator.
Definition: RNG.cpp:359
+
659 
+
660  // Save if this is the first time we have reached max entropy.
+
661  // This provides some protection if the system is powered off before
+
662  // the first auto-save timeout occurs.
+
663  if (firstSave && credits >= RNG_MAX_CREDITS) {
+
664  firstSave = 0;
+
665  save();
+
666  }
+
667 }
+
668 
+
695 void RNGClass::save()
+
696 {
+
697  // Generate random data from the current state and save
+
698  // that as the seed. Then force a rekey.
+
699  ++(block[12]);
+
700  ChaCha::hashCore(stream, block, RNG_ROUNDS);
+
701 #if defined(RNG_EEPROM)
+
702  // We shorten the seed from 48 bytes to 47 to leave room for
+
703  // the CRC-8 value. We do this to align the data on an 8-byte
+
704  // boundary in EERPOM.
+
705  int address = RNG_EEPROM_ADDRESS;
+
706  eeprom_write_block(stream, (void *)address, SEED_SIZE - 1);
+
707  eeprom_write_byte((uint8_t *)(address + SEED_SIZE - 1),
+
708  crypto_crc8('S', stream, SEED_SIZE - 1));
+
709 #elif defined(RNG_DUE_TRNG)
+
710  unsigned posn;
+
711  ((uint32_t *)(RNG_SEED_ADDR))[0] = crypto_crc8('S', stream, SEED_SIZE);
+
712  for (posn = 0; posn < 12; ++posn)
+
713  ((uint32_t *)(RNG_SEED_ADDR))[posn + 1] = stream[posn];
+
714  for (posn = 13; posn < (RNG_FLASH_PAGE_SIZE / 4); ++posn)
+
715  ((uint32_t *)(RNG_SEED_ADDR))[posn + 13] = 0xFFFFFFFF;
+
716  eraseAndWriteSeed();
+
717 #endif
+
718  rekey();
+
719  timer = millis();
+
720 }
+
721 
+
728 void RNGClass::loop()
+
729 {
+
730  // Stir in the entropy from all registered noise sources.
+
731  for (uint8_t posn = 0; posn < count; ++posn)
+
732  noiseSources[posn]->stir();
+
733 
+
734 #if defined(RNG_DUE_TRNG)
+
735  // If there is data available from the Arudino Due's TRNG, then XOR
+
736  // it with the state block and increase the entropy credit. We don't
+
737  // call stir() yet because that will seriously slow down the system
+
738  // given how fast the TRNG is. Instead we save up the XOR'ed TRNG
+
739  // data until the next rand() call and then hash it to generate the
+
740  // desired output.
+
741  //
+
742  // The CPU documentation claims that the TRNG output is very good so
+
743  // this should only make the pool more and more random as time goes on.
+
744  // However there is a risk that the CPU manufacturer was pressured by
+
745  // government or intelligence agencies to insert a back door that
+
746  // generates predictable output. Or the manufacturer was overly
+
747  // optimistic about their TRNG design and it is actually flawed in a
+
748  // way they don't realise.
+
749  //
+
750  // If you are concerned about such threats, then make sure to mix in
+
751  // data from other noise sources. By hashing together the TRNG with
+
752  // the other noise data, rand() should produce unpredictable data even
+
753  // if one of the sources is actually predictable.
+
754  if ((REG_TRNG_ISR & TRNG_ISR_DATRDY) != 0) {
+
755  block[4 + trngPosn] ^= REG_TRNG_ODATA;
+
756  if (++trngPosn >= 12)
+
757  trngPosn = 0;
+
758  if (credits < RNG_MAX_CREDITS) {
+
759  // Credit 1 bit of entropy for the word. The TRNG should be
+
760  // better than this but it is so fast that we want to collect
+
761  // up more data before passing it to the application.
+
762  ++credits;
+
763  }
+
764  }
+
765 #elif defined(RNG_WATCHDOG)
+
766  // Read the 32 bit buffer from the WDT interrupt.
+
767  cli();
+
768  if (outBits >= 32) {
+
769  uint32_t value = hash;
+
770  hash = 0;
+
771  outBits = 0;
+
772  sei();
+
773 
+
774  // Final steps of the Jenkin's one-at-a-time hash function.
+
775  // https://en.wikipedia.org/wiki/Jenkins_hash_function
+
776  value += leftShift3(value);
+
777  value ^= rightShift11(value);
+
778  value += leftShift15(value);
+
779 
+
780  // XOR the word with the state. Stir once we accumulate 48 bytes,
+
781  // which happens about once every 6.4 seconds.
+
782  block[4 + trngPosn] ^= value;
+
783  if (++trngPosn >= 12) {
+
784  trngPosn = 0;
+
785 
+
786  // Credit 1 bit of entropy for each byte of input. It can take
+
787  // between 30 and 40 seconds to accumulate 256 bits of credit.
+
788  stir(0, 0, 48);
+
789  }
+
790  } else {
+
791  sei();
+
792  }
+
793 #endif
+
794 
+
795  // Save the seed if the auto-save timer has expired.
+
796  if ((millis() - timer) >= timeout)
+
797  save();
+
798 }
+
799 
+
819 void RNGClass::destroy()
+
820 {
+
821  clean(block);
+
822  clean(stream);
+
823 #if defined(RNG_EEPROM)
+
824  int address = RNG_EEPROM_ADDRESS;
+
825  for (int posn = 0; posn < SEED_SIZE; ++posn)
+
826  eeprom_write_byte((uint8_t *)(address + posn), 0xFF);
+
827 #elif defined(RNG_DUE_TRNG)
+
828  for (unsigned posn = 0; posn < (RNG_FLASH_PAGE_SIZE / 4); ++posn)
+
829  ((uint32_t *)(RNG_SEED_ADDR))[posn] = 0xFFFFFFFF;
+
830  eraseAndWriteSeed();
+
831 #endif
+
832 }
+
833 
+
837 void RNGClass::rekey()
+
838 {
+
839  // Rekey the cipher for the next request by generating a new block.
+
840  // This is intended to make it difficult to wind the random number
+
841  // backwards if the state is captured later. The first 16 bytes of
+
842  // "block" remain set to "tagRNG".
+
843  ++(block[12]);
+
844  ChaCha::hashCore(stream, block, RNG_ROUNDS);
+
845  memcpy(block + 4, stream, 48);
+
846 
+
847  // Permute the high word of the counter using the system microsecond
+
848  // counter to introduce a little bit of non-stir randomness for each
+
849  // request. Note: If random data is requested on a predictable schedule
+
850  // then this may not help very much. It is still necessary to stir in
+
851  // high quality entropy data on a regular basis using stir().
+
852  block[13] ^= micros();
+
853 }
+
void save()
Saves the random seed to EEPROM.
Definition: RNG.cpp:695
+
void rand(uint8_t *data, size_t len)
Generates random bytes into a caller-supplied buffer.
Definition: RNG.cpp:516
+
void begin(const char *tag)
Initializes the random number generator.
Definition: RNG.cpp:360
Abstract base class for random noise sources.
Definition: NoiseSource.h:29
-
~RNGClass()
Destroys this random number generator instance.
Definition: RNG.cpp:244
+
~RNGClass()
Destroys this random number generator instance.
Definition: RNG.cpp:251
virtual void added()
Called when the noise source is added to RNG with RNG.addNoiseSource().
Definition: NoiseSource.cpp:95
-
void addNoiseSource(NoiseSource &source)
Adds a noise source to the random number generator.
Definition: RNG.cpp:459
-
RNGClass()
Constructs a new random number generator instance.
Definition: RNG.cpp:230
-
void destroy()
Destroys the data in the random number pool and the saved seed in EEPROM.
Definition: RNG.cpp:806
-
bool available(size_t len) const
Determine if there is sufficient entropy available for a specific request size.
Definition: RNG.cpp:585
-
void loop()
Run periodic housekeeping tasks on the random number generator.
Definition: RNG.cpp:715
+
void addNoiseSource(NoiseSource &source)
Adds a noise source to the random number generator.
Definition: RNG.cpp:467
+
RNGClass()
Constructs a new random number generator instance.
Definition: RNG.cpp:238
+
void destroy()
Destroys the data in the random number pool and the saved seed in EEPROM.
Definition: RNG.cpp:819
+
bool available(size_t len) const
Determine if there is sufficient entropy available for a specific request size.
Definition: RNG.cpp:593
+
void loop()
Run periodic housekeeping tasks on the random number generator.
Definition: RNG.cpp:728
Pseudo random number generator suitable for cryptography.
Definition: RNG.h:31
static const int SEED_SIZE
Size of a saved random number seed in EEPROM space.
Definition: RNG.h:53
static void hashCore(uint32_t *output, const uint32_t *input, uint8_t rounds)
Executes the ChaCha hash core on an input memory block.
Definition: ChaCha.cpp:253
-
void stir(const uint8_t *data, size_t len, unsigned int credit=0)
Stirs additional entropy data into the random pool.
Definition: RNG.cpp:618
-
void setAutoSaveTime(uint16_t minutes)
Sets the amount of time between automatic seed saves.
Definition: RNG.cpp:484
+
void stir(const uint8_t *data, size_t len, unsigned int credit=0)
Stirs additional entropy data into the random pool.
Definition: RNG.cpp:626
+
void setAutoSaveTime(uint16_t minutes)
Sets the amount of time between automatic seed saves.
Definition: RNG.cpp:492
diff --git a/RNG_8h_source.html b/RNG_8h_source.html index 47c6b101..8c654285 100644 --- a/RNG_8h_source.html +++ b/RNG_8h_source.html @@ -124,7 +124,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
34  RNGClass();
35  ~RNGClass();
36 
-
37  void begin(const char *tag, int eepromAddress);
+
37  void begin(const char *tag);
38  void addNoiseSource(NoiseSource &source);
39 
40  void setAutoSaveTime(uint16_t minutes);
@@ -140,44 +140,43 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
50 
51  void destroy();
52 
-
53  static const int SEED_SIZE = 49;
+
53  static const int SEED_SIZE = 48;
54 
55 private:
56  uint32_t block[16];
57  uint32_t stream[16];
-
58  int address;
-
59  uint16_t credits : 15;
-
60  uint16_t firstSave : 1;
-
61  unsigned long timer;
-
62  unsigned long timeout;
-
63  NoiseSource *noiseSources[4];
-
64  uint8_t count;
-
65  uint8_t trngPosn;
-
66 
-
67  void rekey();
-
68 };
-
69 
-
70 extern RNGClass RNG;
-
71 
-
72 #endif
-
void save()
Saves the random seed to EEPROM.
Definition: RNG.cpp:687
-
void rand(uint8_t *data, size_t len)
Generates random bytes into a caller-supplied buffer.
Definition: RNG.cpp:508
-
void begin(const char *tag, int eepromAddress)
Initializes the random number generator.
Definition: RNG.cpp:359
+
58  uint16_t credits : 15;
+
59  uint16_t firstSave : 1;
+
60  unsigned long timer;
+
61  unsigned long timeout;
+
62  NoiseSource *noiseSources[4];
+
63  uint8_t count;
+
64  uint8_t trngPosn;
+
65 
+
66  void rekey();
+
67 };
+
68 
+
69 extern RNGClass RNG;
+
70 
+
71 #endif
+
void save()
Saves the random seed to EEPROM.
Definition: RNG.cpp:695
+
void rand(uint8_t *data, size_t len)
Generates random bytes into a caller-supplied buffer.
Definition: RNG.cpp:516
+
void begin(const char *tag)
Initializes the random number generator.
Definition: RNG.cpp:360
Abstract base class for random noise sources.
Definition: NoiseSource.h:29
-
~RNGClass()
Destroys this random number generator instance.
Definition: RNG.cpp:244
-
void addNoiseSource(NoiseSource &source)
Adds a noise source to the random number generator.
Definition: RNG.cpp:459
-
RNGClass()
Constructs a new random number generator instance.
Definition: RNG.cpp:230
-
void destroy()
Destroys the data in the random number pool and the saved seed in EEPROM.
Definition: RNG.cpp:806
-
bool available(size_t len) const
Determine if there is sufficient entropy available for a specific request size.
Definition: RNG.cpp:585
-
void loop()
Run periodic housekeeping tasks on the random number generator.
Definition: RNG.cpp:715
+
~RNGClass()
Destroys this random number generator instance.
Definition: RNG.cpp:251
+
void addNoiseSource(NoiseSource &source)
Adds a noise source to the random number generator.
Definition: RNG.cpp:467
+
RNGClass()
Constructs a new random number generator instance.
Definition: RNG.cpp:238
+
void destroy()
Destroys the data in the random number pool and the saved seed in EEPROM.
Definition: RNG.cpp:819
+
bool available(size_t len) const
Determine if there is sufficient entropy available for a specific request size.
Definition: RNG.cpp:593
+
void loop()
Run periodic housekeeping tasks on the random number generator.
Definition: RNG.cpp:728
Pseudo random number generator suitable for cryptography.
Definition: RNG.h:31
static const int SEED_SIZE
Size of a saved random number seed in EEPROM space.
Definition: RNG.h:53
-
void stir(const uint8_t *data, size_t len, unsigned int credit=0)
Stirs additional entropy data into the random pool.
Definition: RNG.cpp:618
-
void setAutoSaveTime(uint16_t minutes)
Sets the amount of time between automatic seed saves.
Definition: RNG.cpp:484
+
void stir(const uint8_t *data, size_t len, unsigned int credit=0)
Stirs additional entropy data into the random pool.
Definition: RNG.cpp:626
+
void setAutoSaveTime(uint16_t minutes)
Sets the amount of time between automatic seed saves.
Definition: RNG.cpp:492
diff --git a/RTC_8cpp_source.html b/RTC_8cpp_source.html index 65094720..077accea 100644 --- a/RTC_8cpp_source.html +++ b/RTC_8cpp_source.html @@ -380,7 +380,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/RTC_8h_source.html b/RTC_8h_source.html index 85cf626c..06d1514a 100644 --- a/RTC_8h_source.html +++ b/RTC_8h_source.html @@ -237,7 +237,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/RingOscillatorNoiseSource_8cpp_source.html b/RingOscillatorNoiseSource_8cpp_source.html index f5470b4a..01a8284b 100644 --- a/RingOscillatorNoiseSource_8cpp_source.html +++ b/RingOscillatorNoiseSource_8cpp_source.html @@ -285,7 +285,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/RingOscillatorNoiseSource_8h_source.html b/RingOscillatorNoiseSource_8h_source.html index 63de51b4..47d05897 100644 --- a/RingOscillatorNoiseSource_8h_source.html +++ b/RingOscillatorNoiseSource_8h_source.html @@ -145,7 +145,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/SHA256_8cpp_source.html b/SHA256_8cpp_source.html index 05250219..fd4c6e07 100644 --- a/SHA256_8cpp_source.html +++ b/SHA256_8cpp_source.html @@ -339,7 +339,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/SHA256_8h_source.html b/SHA256_8h_source.html index 8a4a6b76..17469cf4 100644 --- a/SHA256_8h_source.html +++ b/SHA256_8h_source.html @@ -160,7 +160,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/SHA3_8cpp_source.html b/SHA3_8cpp_source.html index 202fdddf..82e980d7 100644 --- a/SHA3_8cpp_source.html +++ b/SHA3_8cpp_source.html @@ -257,7 +257,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/SHA3_8h_source.html b/SHA3_8h_source.html index 32c4d86d..85c02c63 100644 --- a/SHA3_8h_source.html +++ b/SHA3_8h_source.html @@ -188,7 +188,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/SHA512_8cpp_source.html b/SHA512_8cpp_source.html index cf7e7e1f..ba44b40c 100644 --- a/SHA512_8cpp_source.html +++ b/SHA512_8cpp_source.html @@ -355,7 +355,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/SHA512_8h_source.html b/SHA512_8h_source.html index 71907522..b9dd4075 100644 --- a/SHA512_8h_source.html +++ b/SHA512_8h_source.html @@ -166,7 +166,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/SHAKE_8cpp_source.html b/SHAKE_8cpp_source.html index 519e07ea..88482061 100644 --- a/SHAKE_8cpp_source.html +++ b/SHAKE_8cpp_source.html @@ -192,7 +192,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/SHAKE_8h_source.html b/SHAKE_8h_source.html index 3a5f8291..accf8575 100644 --- a/SHAKE_8h_source.html +++ b/SHAKE_8h_source.html @@ -174,7 +174,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Shell_8cpp_source.html b/Shell_8cpp_source.html index 396af323..bba10149 100644 --- a/Shell_8cpp_source.html +++ b/Shell_8cpp_source.html @@ -848,7 +848,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Shell_8h_source.html b/Shell_8h_source.html index 61e2e627..e78001b2 100644 --- a/Shell_8h_source.html +++ b/Shell_8h_source.html @@ -273,7 +273,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/SoftI2C_8cpp_source.html b/SoftI2C_8cpp_source.html index e71f4e16..09677d85 100644 --- a/SoftI2C_8cpp_source.html +++ b/SoftI2C_8cpp_source.html @@ -283,7 +283,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/SoftI2C_8h_source.html b/SoftI2C_8h_source.html index c9ac8433..d1fd3905 100644 --- a/SoftI2C_8h_source.html +++ b/SoftI2C_8h_source.html @@ -157,7 +157,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/SpeckSmall_8cpp_source.html b/SpeckSmall_8cpp_source.html index cdc67251..3249a4a2 100644 --- a/SpeckSmall_8cpp_source.html +++ b/SpeckSmall_8cpp_source.html @@ -649,7 +649,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/SpeckSmall_8h_source.html b/SpeckSmall_8h_source.html index 17036858..bfa51fc4 100644 --- a/SpeckSmall_8h_source.html +++ b/SpeckSmall_8h_source.html @@ -141,7 +141,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/SpeckTiny_8cpp_source.html b/SpeckTiny_8cpp_source.html index d0f1a3ef..ae4cc6fe 100644 --- a/SpeckTiny_8cpp_source.html +++ b/SpeckTiny_8cpp_source.html @@ -517,7 +517,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/SpeckTiny_8h_source.html b/SpeckTiny_8h_source.html index 0297d7c5..9798c180 100644 --- a/SpeckTiny_8h_source.html +++ b/SpeckTiny_8h_source.html @@ -154,7 +154,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Speck_8cpp_source.html b/Speck_8cpp_source.html index 3fb96a85..c07bea55 100644 --- a/Speck_8cpp_source.html +++ b/Speck_8cpp_source.html @@ -618,7 +618,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Speck_8h_source.html b/Speck_8h_source.html index d8012b2f..c4d7cc89 100644 --- a/Speck_8h_source.html +++ b/Speck_8h_source.html @@ -149,7 +149,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/TelnetDefs_8h_source.html b/TelnetDefs_8h_source.html index a9aa983a..a8ce2ccd 100644 --- a/TelnetDefs_8h_source.html +++ b/TelnetDefs_8h_source.html @@ -205,7 +205,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Terminal_8cpp_source.html b/Terminal_8cpp_source.html index e6bdabb0..a2d63d5a 100644 --- a/Terminal_8cpp_source.html +++ b/Terminal_8cpp_source.html @@ -1037,7 +1037,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Terminal_8h_source.html b/Terminal_8h_source.html index 701599d6..0c1f6f02 100644 --- a/Terminal_8h_source.html +++ b/Terminal_8h_source.html @@ -299,7 +299,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/TextField_8cpp_source.html b/TextField_8cpp_source.html index 763a1635..ac8cc8dc 100644 --- a/TextField_8cpp_source.html +++ b/TextField_8cpp_source.html @@ -156,7 +156,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/TextField_8h_source.html b/TextField_8h_source.html index 036b73dd..359ba657 100644 --- a/TextField_8h_source.html +++ b/TextField_8h_source.html @@ -142,7 +142,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/TimeField_8cpp_source.html b/TimeField_8cpp_source.html index 5f793c76..8f0febec 100644 --- a/TimeField_8cpp_source.html +++ b/TimeField_8cpp_source.html @@ -325,7 +325,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/TimeField_8h_source.html b/TimeField_8h_source.html index f260c289..61a8bcac 100644 --- a/TimeField_8h_source.html +++ b/TimeField_8h_source.html @@ -167,7 +167,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/TransistorNoiseSource_8cpp_source.html b/TransistorNoiseSource_8cpp_source.html index 36f496cf..c89df2c1 100644 --- a/TransistorNoiseSource_8cpp_source.html +++ b/TransistorNoiseSource_8cpp_source.html @@ -295,7 +295,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/TransistorNoiseSource_8h_source.html b/TransistorNoiseSource_8h_source.html index e3b0ca47..8d2fbc8e 100644 --- a/TransistorNoiseSource_8h_source.html +++ b/TransistorNoiseSource_8h_source.html @@ -151,7 +151,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/USBKeysExtra_8h_source.html b/USBKeysExtra_8h_source.html index 9e564f66..f8786ee3 100644 --- a/USBKeysExtra_8h_source.html +++ b/USBKeysExtra_8h_source.html @@ -215,7 +215,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/XOF_8cpp_source.html b/XOF_8cpp_source.html index 78bba94b..5571c4e0 100644 --- a/XOF_8cpp_source.html +++ b/XOF_8cpp_source.html @@ -125,7 +125,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/XOF_8h_source.html b/XOF_8h_source.html index 2b90d3ee..802c03d8 100644 --- a/XOF_8h_source.html +++ b/XOF_8h_source.html @@ -152,7 +152,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/XTS_8cpp_source.html b/XTS_8cpp_source.html index 721f66d1..c23cdde2 100644 --- a/XTS_8cpp_source.html +++ b/XTS_8cpp_source.html @@ -290,7 +290,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/XTS_8h_source.html b/XTS_8h_source.html index 45b125e4..8cc017bd 100644 --- a/XTS_8h_source.html +++ b/XTS_8h_source.html @@ -217,7 +217,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/alarm-clock_8dox.html b/alarm-clock_8dox.html index a66c4f2b..a9128f7c 100644 --- a/alarm-clock_8dox.html +++ b/alarm-clock_8dox.html @@ -87,7 +87,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/alarm_clock.html b/alarm_clock.html index b7bf0008..dbe69ad8 100644 --- a/alarm_clock.html +++ b/alarm_clock.html @@ -140,7 +140,7 @@ Completed Clock diff --git a/annotated.html b/annotated.html index 24e0d00a..7859b131 100644 --- a/annotated.html +++ b/annotated.html @@ -177,7 +177,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/blink-blink_8dox.html b/blink-blink_8dox.html index 40988407..aa3107a1 100644 --- a/blink-blink_8dox.html +++ b/blink-blink_8dox.html @@ -87,7 +87,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/blink-charlieplex_8dox.html b/blink-charlieplex_8dox.html index bc1ce360..239b6c0a 100644 --- a/blink-charlieplex_8dox.html +++ b/blink-charlieplex_8dox.html @@ -87,7 +87,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/blink-cylon_8dox.html b/blink-cylon_8dox.html index c62cd998..1b01c250 100644 --- a/blink-cylon_8dox.html +++ b/blink-cylon_8dox.html @@ -87,7 +87,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/blink-startrek_8dox.html b/blink-startrek_8dox.html index 20545bf6..e04130d7 100644 --- a/blink-startrek_8dox.html +++ b/blink-startrek_8dox.html @@ -87,7 +87,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/blink_blink.html b/blink_blink.html index 4bebb90d..f1ab2621 100644 --- a/blink_blink.html +++ b/blink_blink.html @@ -120,7 +120,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/blink_charlieplex.html b/blink_charlieplex.html index 045f7601..97bba350 100644 --- a/blink_charlieplex.html +++ b/blink_charlieplex.html @@ -160,7 +160,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/blink_cylon.html b/blink_cylon.html index d4680305..f5fa08e3 100644 --- a/blink_cylon.html +++ b/blink_cylon.html @@ -171,7 +171,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/blink_startrek.html b/blink_startrek.html index 17bc62ee..a39efde9 100644 --- a/blink_startrek.html +++ b/blink_startrek.html @@ -237,7 +237,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classAES128-members.html b/classAES128-members.html index 23218a8b..5b355890 100644 --- a/classAES128-members.html +++ b/classAES128-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classAES128.html b/classAES128.html index b242c352..93a05f23 100644 --- a/classAES128.html +++ b/classAES128.html @@ -265,7 +265,7 @@ Additional Inherited Members diff --git a/classAES192-members.html b/classAES192-members.html index 6b1e03db..9439a71b 100644 --- a/classAES192-members.html +++ b/classAES192-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classAES192.html b/classAES192.html index 97cd3cbf..a75b9357 100644 --- a/classAES192.html +++ b/classAES192.html @@ -265,7 +265,7 @@ Additional Inherited Members diff --git a/classAES256-members.html b/classAES256-members.html index 806b4fdf..84b0648d 100644 --- a/classAES256-members.html +++ b/classAES256-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classAES256.html b/classAES256.html index f63ce5eb..81af23d7 100644 --- a/classAES256.html +++ b/classAES256.html @@ -265,7 +265,7 @@ Additional Inherited Members diff --git a/classAESCommon-members.html b/classAESCommon-members.html index 73b83002..0c216bae 100644 --- a/classAESCommon-members.html +++ b/classAESCommon-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classAESCommon.html b/classAESCommon.html index 78729af1..1f9a690d 100644 --- a/classAESCommon.html +++ b/classAESCommon.html @@ -322,7 +322,7 @@ Protected Member Functions diff --git a/classAuthenticatedCipher-members.html b/classAuthenticatedCipher-members.html index d49a5329..ba1f506e 100644 --- a/classAuthenticatedCipher-members.html +++ b/classAuthenticatedCipher-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classAuthenticatedCipher.html b/classAuthenticatedCipher.html index 6e2768c8..a485ea8a 100644 --- a/classAuthenticatedCipher.html +++ b/classAuthenticatedCipher.html @@ -351,7 +351,7 @@ virtual  diff --git a/classBLAKE2b-members.html b/classBLAKE2b-members.html index ef5da5dc..b56118a9 100644 --- a/classBLAKE2b-members.html +++ b/classBLAKE2b-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classBLAKE2b.html b/classBLAKE2b.html index 2e206e51..8cdd9dc4 100644 --- a/classBLAKE2b.html +++ b/classBLAKE2b.html @@ -600,7 +600,7 @@ Additional Inherited Members diff --git a/classBLAKE2s-members.html b/classBLAKE2s-members.html index b7fcb050..04521b30 100644 --- a/classBLAKE2s-members.html +++ b/classBLAKE2s-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classBLAKE2s.html b/classBLAKE2s.html index b7f9a358..04537bee 100644 --- a/classBLAKE2s.html +++ b/classBLAKE2s.html @@ -600,7 +600,7 @@ Additional Inherited Members diff --git a/classBigNumberUtil-members.html b/classBigNumberUtil-members.html index 3a7a4109..73a7eef1 100644 --- a/classBigNumberUtil-members.html +++ b/classBigNumberUtil-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classBigNumberUtil.html b/classBigNumberUtil.html index 47742c39..37de8ce4 100644 --- a/classBigNumberUtil.html +++ b/classBigNumberUtil.html @@ -943,7 +943,7 @@ Static Public Member Functions diff --git a/classBitmap-members.html b/classBitmap-members.html index e9a99072..06143dc9 100644 --- a/classBitmap-members.html +++ b/classBitmap-members.html @@ -138,7 +138,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classBitmap.html b/classBitmap.html index 5f4566c0..19aa1d8b 100644 --- a/classBitmap.html +++ b/classBitmap.html @@ -1745,7 +1745,7 @@ class DMD diff --git a/classBlinkLED-members.html b/classBlinkLED-members.html index 6ff3d4a3..edaee4cf 100644 --- a/classBlinkLED-members.html +++ b/classBlinkLED-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classBlinkLED.html b/classBlinkLED.html index 84149020..8188c246 100644 --- a/classBlinkLED.html +++ b/classBlinkLED.html @@ -428,7 +428,7 @@ Public Member Functions diff --git a/classBlockCipher-members.html b/classBlockCipher-members.html index 73779b9a..9376f8b0 100644 --- a/classBlockCipher-members.html +++ b/classBlockCipher-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classBlockCipher.html b/classBlockCipher.html index 13e9a632..b2c48e41 100644 --- a/classBlockCipher.html +++ b/classBlockCipher.html @@ -410,7 +410,7 @@ Public Member Functions diff --git a/classBoolField-members.html b/classBoolField-members.html index 9686b290..83a5c5aa 100644 --- a/classBoolField-members.html +++ b/classBoolField-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classBoolField.html b/classBoolField.html index 4e20e9f4..80a98b28 100644 --- a/classBoolField.html +++ b/classBoolField.html @@ -506,7 +506,7 @@ LiquidCrystal *  diff --git a/classCBC-members.html b/classCBC-members.html index 2ddffa2b..b2568cb9 100644 --- a/classCBC-members.html +++ b/classCBC-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classCBC.html b/classCBC.html index c71250b9..c1e55513 100644 --- a/classCBC.html +++ b/classCBC.html @@ -185,7 +185,7 @@ class CBC< T > diff --git a/classCBCCommon-members.html b/classCBCCommon-members.html index e0078ed4..dbb131e1 100644 --- a/classCBCCommon-members.html +++ b/classCBCCommon-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classCBCCommon.html b/classCBCCommon.html index ba6750eb..76861b2a 100644 --- a/classCBCCommon.html +++ b/classCBCCommon.html @@ -534,7 +534,7 @@ Protected Member Functions diff --git a/classCFB-members.html b/classCFB-members.html index f8b7e765..fdeb7b68 100644 --- a/classCFB-members.html +++ b/classCFB-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classCFB.html b/classCFB.html index 18588d75..c5d34a94 100644 --- a/classCFB.html +++ b/classCFB.html @@ -185,7 +185,7 @@ class CFB< T > diff --git a/classCFBCommon-members.html b/classCFBCommon-members.html index dbb14243..ba26e5f5 100644 --- a/classCFBCommon-members.html +++ b/classCFBCommon-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classCFBCommon.html b/classCFBCommon.html index 768ac276..34c51a5f 100644 --- a/classCFBCommon.html +++ b/classCFBCommon.html @@ -534,7 +534,7 @@ Protected Member Functions diff --git a/classCTR-members.html b/classCTR-members.html index dfbe1ffa..a7cb52d4 100644 --- a/classCTR-members.html +++ b/classCTR-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classCTR.html b/classCTR.html index 87f5e0ad..d00fa128 100644 --- a/classCTR.html +++ b/classCTR.html @@ -181,7 +181,7 @@ class CTR< T > diff --git a/classCTRCommon-members.html b/classCTRCommon-members.html index 8f506c12..0ff1a7d5 100644 --- a/classCTRCommon-members.html +++ b/classCTRCommon-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classCTRCommon.html b/classCTRCommon.html index 4085aba6..814c38d4 100644 --- a/classCTRCommon.html +++ b/classCTRCommon.html @@ -563,7 +563,7 @@ Protected Member Functions diff --git a/classChaCha-members.html b/classChaCha-members.html index 03461835..9b2859f7 100644 --- a/classChaCha-members.html +++ b/classChaCha-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classChaCha.html b/classChaCha.html index 5c31202d..88858a6b 100644 --- a/classChaCha.html +++ b/classChaCha.html @@ -673,7 +673,7 @@ class ChaChaPoly< diff --git a/classChaChaPoly-members.html b/classChaChaPoly-members.html index 569a4b94..b44ea330 100644 --- a/classChaChaPoly-members.html +++ b/classChaChaPoly-members.html @@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classChaChaPoly.html b/classChaChaPoly.html index ee118bf0..aaede2f5 100644 --- a/classChaChaPoly.html +++ b/classChaChaPoly.html @@ -665,7 +665,7 @@ virtual  diff --git a/classCharlieplex-members.html b/classCharlieplex-members.html index 8ebd0ef9..e5daa0cc 100644 --- a/classCharlieplex-members.html +++ b/classCharlieplex-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classCharlieplex.html b/classCharlieplex.html index 1eb3fad2..810a424c 100644 --- a/classCharlieplex.html +++ b/classCharlieplex.html @@ -538,7 +538,7 @@ Public Member Functions diff --git a/classChaseLEDs-members.html b/classChaseLEDs-members.html index 31264482..cd5e0756 100644 --- a/classChaseLEDs-members.html +++ b/classChaseLEDs-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classChaseLEDs.html b/classChaseLEDs.html index 9212f808..19752bda 100644 --- a/classChaseLEDs.html +++ b/classChaseLEDs.html @@ -347,7 +347,7 @@ Protected Member Functions diff --git a/classCipher-members.html b/classCipher-members.html index 1b82005e..4c68e74d 100644 --- a/classCipher-members.html +++ b/classCipher-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classCipher.html b/classCipher.html index ebcb5ce3..97ac8155 100644 --- a/classCipher.html +++ b/classCipher.html @@ -485,7 +485,7 @@ Public Member Functions diff --git a/classCurve25519-members.html b/classCurve25519-members.html index 65735433..34836b25 100644 --- a/classCurve25519-members.html +++ b/classCurve25519-members.html @@ -97,7 +97,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classCurve25519.html b/classCurve25519.html index c48ddf97..9eada0c2 100644 --- a/classCurve25519.html +++ b/classCurve25519.html @@ -303,7 +303,7 @@ class Ed25519 diff --git a/classDMD-members.html b/classDMD-members.html index d931702e..bd3b9b45 100644 --- a/classDMD-members.html +++ b/classDMD-members.html @@ -150,7 +150,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classDMD.html b/classDMD.html index 704536a9..72fe8c1b 100644 --- a/classDMD.html +++ b/classDMD.html @@ -755,7 +755,7 @@ Multiple panels diff --git a/classDS1307RTC-members.html b/classDS1307RTC-members.html index 40e37ee8..0637a7f1 100644 --- a/classDS1307RTC-members.html +++ b/classDS1307RTC-members.html @@ -125,7 +125,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classDS1307RTC.html b/classDS1307RTC.html index 3525ff13..a920dbe7 100644 --- a/classDS1307RTC.html +++ b/classDS1307RTC.html @@ -598,7 +598,7 @@ static const uint8_t  diff --git a/classDS3231RTC-members.html b/classDS3231RTC-members.html index 8cf2d511..de557a0a 100644 --- a/classDS3231RTC-members.html +++ b/classDS3231RTC-members.html @@ -133,7 +133,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classDS3231RTC.html b/classDS3231RTC.html index 07ee47d7..2a7803c7 100644 --- a/classDS3231RTC.html +++ b/classDS3231RTC.html @@ -713,7 +713,7 @@ static const uint8_t  diff --git a/classDS3232RTC-members.html b/classDS3232RTC-members.html index 918e97a8..80458c24 100644 --- a/classDS3232RTC-members.html +++ b/classDS3232RTC-members.html @@ -130,7 +130,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classDS3232RTC.html b/classDS3232RTC.html index c9e11377..9758175e 100644 --- a/classDS3232RTC.html +++ b/classDS3232RTC.html @@ -750,7 +750,7 @@ static const uint8_t  diff --git a/classEAX-members.html b/classEAX-members.html index dcef3bb0..c13fdfc0 100644 --- a/classEAX-members.html +++ b/classEAX-members.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classEAX.html b/classEAX.html index ee314974..7f9f0a48 100644 --- a/classEAX.html +++ b/classEAX.html @@ -219,7 +219,7 @@ class EAX< T > diff --git a/classEAXCommon-members.html b/classEAXCommon-members.html index 6f341d1d..ab418d07 100644 --- a/classEAXCommon-members.html +++ b/classEAXCommon-members.html @@ -117,7 +117,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classEAXCommon.html b/classEAXCommon.html index 200a4955..44cf5017 100644 --- a/classEAXCommon.html +++ b/classEAXCommon.html @@ -732,7 +732,7 @@ Protected Member Functions diff --git a/classEEPROM24-members.html b/classEEPROM24-members.html index 0d6586f6..00c9e9d4 100644 --- a/classEEPROM24-members.html +++ b/classEEPROM24-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classEEPROM24.html b/classEEPROM24.html index df642617..7c2750b6 100644 --- a/classEEPROM24.html +++ b/classEEPROM24.html @@ -431,7 +431,7 @@ Public Member Functions diff --git a/classEd25519-members.html b/classEd25519-members.html index 4980c851..d282df8d 100644 --- a/classEd25519-members.html +++ b/classEd25519-members.html @@ -97,7 +97,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classEd25519.html b/classEd25519.html index c930499f..5e8e38d0 100644 --- a/classEd25519.html +++ b/classEd25519.html @@ -354,7 +354,7 @@ Static Public Member Functions diff --git a/classField-members.html b/classField-members.html index 7cfece90..15da75e7 100644 --- a/classField-members.html +++ b/classField-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classField.html b/classField.html index c48b833c..47ba8823 100644 --- a/classField.html +++ b/classField.html @@ -424,7 +424,7 @@ class Form diff --git a/classForm-members.html b/classForm-members.html index f56ef99c..837f0eb2 100644 --- a/classForm-members.html +++ b/classForm-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classForm.html b/classForm.html index a3780a1c..1d9e4d2b 100644 --- a/classForm.html +++ b/classForm.html @@ -485,7 +485,7 @@ class Field diff --git a/classGCM-members.html b/classGCM-members.html index 99f06773..1642e8ed 100644 --- a/classGCM-members.html +++ b/classGCM-members.html @@ -119,7 +119,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classGCM.html b/classGCM.html index 4048348e..c2e78153 100644 --- a/classGCM.html +++ b/classGCM.html @@ -223,7 +223,7 @@ class GCM< T > diff --git a/classGCMCommon-members.html b/classGCMCommon-members.html index 68f28dc0..64285782 100644 --- a/classGCMCommon-members.html +++ b/classGCMCommon-members.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classGCMCommon.html b/classGCMCommon.html index 41daa8a8..80c37c74 100644 --- a/classGCMCommon.html +++ b/classGCMCommon.html @@ -736,7 +736,7 @@ Protected Member Functions diff --git a/classGF128-members.html b/classGF128-members.html index 9e1cbddc..4b214a36 100644 --- a/classGF128-members.html +++ b/classGF128-members.html @@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classGF128.html b/classGF128.html index 81847a50..797fa47f 100644 --- a/classGF128.html +++ b/classGF128.html @@ -334,7 +334,7 @@ Static Public Member Functions diff --git a/classGHASH-members.html b/classGHASH-members.html index 466ad109..9a3d7ca0 100644 --- a/classGHASH-members.html +++ b/classGHASH-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classGHASH.html b/classGHASH.html index dbc05cb9..c311dea3 100644 --- a/classGHASH.html +++ b/classGHASH.html @@ -265,7 +265,7 @@ void  diff --git a/classHash-members.html b/classHash-members.html index 91ddf207..98d7b301 100644 --- a/classHash-members.html +++ b/classHash-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classHash.html b/classHash.html index 7cd24355..7831471e 100644 --- a/classHash.html +++ b/classHash.html @@ -575,7 +575,7 @@ Protected Member Functions diff --git a/classI2CMaster-members.html b/classI2CMaster-members.html index 59bb4f8c..d0d9085a 100644 --- a/classI2CMaster-members.html +++ b/classI2CMaster-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classI2CMaster.html b/classI2CMaster.html index d5b457b2..885955bf 100644 --- a/classI2CMaster.html +++ b/classI2CMaster.html @@ -328,7 +328,7 @@ virtual unsigned int  diff --git a/classIRreceiver-members.html b/classIRreceiver-members.html index f52e681a..7d33ec23 100644 --- a/classIRreceiver-members.html +++ b/classIRreceiver-members.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classIRreceiver.html b/classIRreceiver.html index 3931fd2d..278a56ee 100644 --- a/classIRreceiver.html +++ b/classIRreceiver.html @@ -328,7 +328,7 @@ void _IR_receive_interrupt diff --git a/classIntField-members.html b/classIntField-members.html index 1bfa2a3e..6d4fbf90 100644 --- a/classIntField-members.html +++ b/classIntField-members.html @@ -118,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classIntField.html b/classIntField.html index 87edf500..80c11819 100644 --- a/classIntField.html +++ b/classIntField.html @@ -647,7 +647,7 @@ LiquidCrystal *  diff --git a/classKeccakCore-members.html b/classKeccakCore-members.html index e7c0ce49..45d114c4 100644 --- a/classKeccakCore-members.html +++ b/classKeccakCore-members.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classKeccakCore.html b/classKeccakCore.html index aee70245..e9214fe1 100644 --- a/classKeccakCore.html +++ b/classKeccakCore.html @@ -475,7 +475,7 @@ void  diff --git a/classLCD-members.html b/classLCD-members.html index 6493e2a2..a090bf40 100644 --- a/classLCD-members.html +++ b/classLCD-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classLCD.html b/classLCD.html index c9a4bf86..5731a97e 100644 --- a/classLCD.html +++ b/classLCD.html @@ -592,7 +592,7 @@ Support for DFRobot LCD Shield diff --git a/classListField-members.html b/classListField-members.html index 462b4567..f8c92607 100644 --- a/classListField-members.html +++ b/classListField-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classListField.html b/classListField.html index 225833eb..b23f5fb2 100644 --- a/classListField.html +++ b/classListField.html @@ -411,7 +411,7 @@ LiquidCrystal *  diff --git a/classLoginShell-members.html b/classLoginShell-members.html index c1b24791..075183cb 100644 --- a/classLoginShell-members.html +++ b/classLoginShell-members.html @@ -180,7 +180,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classLoginShell.html b/classLoginShell.html index e71b86cf..40c19768 100644 --- a/classLoginShell.html +++ b/classLoginShell.html @@ -572,7 +572,7 @@ Additional Inherited Members diff --git a/classMelody-members.html b/classMelody-members.html index eb39b00b..6e35bfb6 100644 --- a/classMelody-members.html +++ b/classMelody-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classMelody.html b/classMelody.html index 0a7a74b6..cf433a93 100644 --- a/classMelody.html +++ b/classMelody.html @@ -371,7 +371,7 @@ bool  diff --git a/classNewHope-members.html b/classNewHope-members.html index f9934251..a9d3bf7a 100644 --- a/classNewHope-members.html +++ b/classNewHope-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classNewHope.html b/classNewHope.html index 9fe09912..5aae4e32 100644 --- a/classNewHope.html +++ b/classNewHope.html @@ -362,7 +362,7 @@ Static Public Member Functions diff --git a/classNoiseSource-members.html b/classNoiseSource-members.html index 1b0c5855..ed49a53e 100644 --- a/classNoiseSource-members.html +++ b/classNoiseSource-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classNoiseSource.html b/classNoiseSource.html index 29454979..7cea00aa 100644 --- a/classNoiseSource.html +++ b/classNoiseSource.html @@ -161,7 +161,7 @@ Protected Member Functions

Called when the noise source is added to RNG with RNG.addNoiseSource().

-

This function is intended for noise source initialization tasks that must be performed after RNG.begin() has been called to initialize the global random number pool. For example, if the noise source has a unique identifier or serial number then this function can stir it into the pool at startup time.

+

This function is intended for noise source initialization tasks that must be performed after RNG.begin() has been called to initialize the global random number pool. For example, if the noise source has a unique identifier or serial number then this function can stir it into the pool at startup time.

Definition at line 95 of file NoiseSource.cpp.

@@ -289,7 +289,7 @@ Protected Member Functions
diff --git a/classOFB-members.html b/classOFB-members.html index 1466556a..7ca26a4a 100644 --- a/classOFB-members.html +++ b/classOFB-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classOFB.html b/classOFB.html index d23f4c22..5ee1be32 100644 --- a/classOFB.html +++ b/classOFB.html @@ -181,7 +181,7 @@ class OFB< T > diff --git a/classOFBCommon-members.html b/classOFBCommon-members.html index b01413b8..5478bf9a 100644 --- a/classOFBCommon-members.html +++ b/classOFBCommon-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classOFBCommon.html b/classOFBCommon.html index d4dafeb8..b428f5b9 100644 --- a/classOFBCommon.html +++ b/classOFBCommon.html @@ -534,7 +534,7 @@ Protected Member Functions diff --git a/classOMAC-members.html b/classOMAC-members.html index 4d2154a8..6f420f7e 100644 --- a/classOMAC-members.html +++ b/classOMAC-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classOMAC.html b/classOMAC.html index f3eff6a1..b7eb53d6 100644 --- a/classOMAC.html +++ b/classOMAC.html @@ -387,7 +387,7 @@ void  diff --git a/classP521-members.html b/classP521-members.html index 7109240a..ee8ae543 100644 --- a/classP521-members.html +++ b/classP521-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classP521.html b/classP521.html index 066c881e..fea4d7a9 100644 --- a/classP521.html +++ b/classP521.html @@ -646,7 +646,7 @@ Static Public Member Functions diff --git a/classPoly1305-members.html b/classPoly1305-members.html index f835cd35..97065b29 100644 --- a/classPoly1305-members.html +++ b/classPoly1305-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classPoly1305.html b/classPoly1305.html index 2230a5aa..57b94f14 100644 --- a/classPoly1305.html +++ b/classPoly1305.html @@ -280,7 +280,7 @@ void  diff --git a/classRNGClass-members.html b/classRNGClass-members.html index 698c911d..a370a5e8 100644 --- a/classRNGClass-members.html +++ b/classRNGClass-members.html @@ -92,7 +92,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); - + @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
addNoiseSource(NoiseSource &source)RNGClass
available(size_t len) const RNGClass
begin(const char *tag, int eepromAddress)RNGClass
begin(const char *tag)RNGClass
destroy()RNGClass
loop()RNGClass
rand(uint8_t *data, size_t len)RNGClass
diff --git a/classRNGClass.html b/classRNGClass.html index 54609e1a..0cb42b25 100644 --- a/classRNGClass.html +++ b/classRNGClass.html @@ -106,9 +106,9 @@ Public Member Functions  ~RNGClass ()  Destroys this random number generator instance.
  -void begin (const char *tag, int eepromAddress) - Initializes the random number generator. More...
-  +void begin (const char *tag) + Initializes the random number generator. More...
+  void addNoiseSource (NoiseSource &source)  Adds a noise source to the random number generator. More...
  @@ -136,9 +136,8 @@ Public Member Functions - - + +

Static Public Attributes

-static const int SEED_SIZE = 49
 Size of a saved random number seed in EEPROM space.
static const int SEED_SIZE = 48
 Size of a saved random number seed in EEPROM space. More...
 

Detailed Description

@@ -146,7 +145,7 @@ static const int begin() is an example of an application-specific value. +
  • Application-specific, unique to the application. The tag that is passed to begin() is an example of an application-specific value.
  • Noise-based, generated by a hardware random number generator that provides unpredictable values from a noise source.
  • The following example demonstrates how to initialise the random number generator:

    @@ -167,8 +166,8 @@ static const int  Ethernet.begin(mac_address);
    // Initialize the random number generator with the application tag
    -
    // "MyApp 1.0" and load the previous seed from EEPROM address 950.
    -
    RNG.begin("MyApp 1.0", 950);
    +
    // "MyApp 1.0" and load the previous seed from EEPROM.
    +
    RNG.begin("MyApp 1.0");
    // Stir in the Ethernet MAC address.
    RNG.stir(mac_address, sizeof(mac_address));
    @@ -187,7 +186,7 @@ static const int 
    // ...
    }
    -

    The loop() function will automatically save the random number seed on a regular basis. By default the seed is saved every hour but this can be changed using setAutoSaveTime().

    +

    The loop() function will automatically save the random number seed on a regular basis to the last SEED_SIZE bytes of EEPROM memory. By default the seed is saved every hour but this can be changed using setAutoSaveTime().

    Keep in mind that saving too often may cause the EEPROM to wear out quicker. It is wise to limit saving to once an hour or once a day depending upon how long you intend to field the device before replacing it. For example, an EEPROM rated for 100k erase/write cycles will last about 69 days saving once a minute or 11 years saving once an hour.

    The application can still elect to call save() at any time if wants. For example, if the application can detect power loss or shutdown conditions programmatically, then it may make sense to force a save() of the seed upon shutdown.

    The Arduino Due does not have EEPROM so RNG saves the seed into the last page of system flash memory instead. The RNG class will also mix in data from the CPU's built-in True Random Number Generator (TRNG). Assuming that the CPU's TRNG is trustworthy, this should be sufficient to properly seed the random number generator. It is recommended to also mix in data from other noise sources just in case the CPU's TRNG is not trustworthy.

    @@ -209,10 +208,10 @@ static const int 

    Constructs a new random number generator instance.

    -

    This constructor must be followed by a call to begin() to properly initialize the random number generator.

    -
    See Also
    begin()
    +

    This constructor must be followed by a call to begin() to properly initialize the random number generator.

    +
    See Also
    begin()
    -

    Definition at line 230 of file RNG.cpp.

    +

    Definition at line 238 of file RNG.cpp.

    @@ -239,9 +238,9 @@ static const int NoiseSource::stir() directly.

    -
    See Also
    loop(), begin()
    +
    See Also
    loop(), begin()
    -

    Definition at line 459 of file RNG.cpp.

    +

    Definition at line 467 of file RNG.cpp.

    @@ -284,11 +283,11 @@ static const int 
    See Also
    rand()
    -

    Definition at line 585 of file RNG.cpp.

    +

    Definition at line 593 of file RNG.cpp.

    - + @@ -343,11 +330,11 @@ static const int  must be called again to re-initialize the random number generator.

    +

    After this function is called, begin() must be called again to re-initialize the random number generator.

    Note
    The rand() and save() functions take some care to manage the random number pool in a way that makes prediction of past outputs from a captured state very difficult. Future outputs may be predictable if noise or other high-entropy data is not mixed in with stir() on a regular basis.
    -
    See Also
    begin()
    +
    See Also
    begin()
    -

    Definition at line 806 of file RNG.cpp.

    +

    Definition at line 819 of file RNG.cpp.

    @@ -367,7 +354,7 @@ static const int  -

    Definition at line 715 of file RNG.cpp.

    +

    Definition at line 728 of file RNG.cpp.

    @@ -407,7 +394,7 @@ static const int available() function can be polled to determine when sufficient entropy is available.

    See Also
    available(), stir()
    -

    Definition at line 508 of file RNG.cpp.

    +

    Definition at line 516 of file RNG.cpp.

    @@ -431,7 +418,7 @@ static const int stir() in new noise data at startup.

    See Also
    loop(), stir()
    -

    Definition at line 687 of file RNG.cpp.

    +

    Definition at line 695 of file RNG.cpp.

    @@ -460,7 +447,7 @@ static const int 
    See Also
    save(), stir()
    -

    Definition at line 484 of file RNG.cpp.

    +

    Definition at line 492 of file RNG.cpp.

    @@ -508,7 +495,33 @@ static const int 
    loop()
    -

    Definition at line 618 of file RNG.cpp.

    +

    Definition at line 626 of file RNG.cpp.

    + + + +

    Member Data Documentation

    + +
    +
    + + + + + +
    + + + + +
    RNGClass::SEED_SIZE = 48
    +
    +static
    +
    + +

    Size of a saved random number seed in EEPROM space.

    +

    The seed is saved into the last SEED_SIZE bytes of EEPROM memory. The address is dependent upon the size of EEPROM fitted in the device.

    + +

    Definition at line 53 of file RNG.h.

    @@ -519,7 +532,7 @@ static const int  diff --git a/classRTC-members.html b/classRTC-members.html index 293a8c35..8e768974 100644 --- a/classRTC-members.html +++ b/classRTC-members.html @@ -123,7 +123,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classRTC.html b/classRTC.html index 48c37b5d..ff57afdd 100644 --- a/classRTC.html +++ b/classRTC.html @@ -779,7 +779,7 @@ static const uint8_t  diff --git a/classRTCAlarm-members.html b/classRTCAlarm-members.html index f8886d9c..9f4e6cba 100644 --- a/classRTCAlarm-members.html +++ b/classRTCAlarm-members.html @@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classRTCDate-members.html b/classRTCDate-members.html index b3e1497d..9d14c1d2 100644 --- a/classRTCDate-members.html +++ b/classRTCDate-members.html @@ -96,7 +96,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classRTCTime-members.html b/classRTCTime-members.html index d30b63b6..a0d0d726 100644 --- a/classRTCTime-members.html +++ b/classRTCTime-members.html @@ -96,7 +96,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classRingOscillatorNoiseSource-members.html b/classRingOscillatorNoiseSource-members.html index 010074d2..0405e022 100644 --- a/classRingOscillatorNoiseSource-members.html +++ b/classRingOscillatorNoiseSource-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classRingOscillatorNoiseSource.html b/classRingOscillatorNoiseSource.html index abaf1d61..373d86a4 100644 --- a/classRingOscillatorNoiseSource.html +++ b/classRingOscillatorNoiseSource.html @@ -160,7 +160,7 @@ Additional Inherited Members
    void setup() {
    // Initialize the random number generator with the application tag
    // "MyApp 1.0" and load the previous seed from EEPROM address 500.
    -
    RNG.begin("MyApp 1.0", 500);
    +
    RNG.begin("MyApp 1.0", 500);
    // Add the noise source to the list of sources known to RNG.
    RNG.addNoiseSource(noise);
    @@ -253,7 +253,7 @@ Additional Inherited Members diff --git a/classSHA256-members.html b/classSHA256-members.html index 8f631c9e..cafef998 100644 --- a/classSHA256-members.html +++ b/classSHA256-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classSHA256.html b/classSHA256.html index 0d6111b7..af325351 100644 --- a/classSHA256.html +++ b/classSHA256.html @@ -506,7 +506,7 @@ Additional Inherited Members diff --git a/classSHA3__256-members.html b/classSHA3__256-members.html index 56a1a00e..3dd33261 100644 --- a/classSHA3__256-members.html +++ b/classSHA3__256-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classSHA3__256.html b/classSHA3__256.html index 67d4850c..cfd42360 100644 --- a/classSHA3__256.html +++ b/classSHA3__256.html @@ -506,7 +506,7 @@ Additional Inherited Members diff --git a/classSHA3__512-members.html b/classSHA3__512-members.html index 9e2de975..3e023934 100644 --- a/classSHA3__512-members.html +++ b/classSHA3__512-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classSHA3__512.html b/classSHA3__512.html index 9bf19340..cf821673 100644 --- a/classSHA3__512.html +++ b/classSHA3__512.html @@ -506,7 +506,7 @@ Additional Inherited Members diff --git a/classSHA512-members.html b/classSHA512-members.html index 3517aad6..9d90ba48 100644 --- a/classSHA512-members.html +++ b/classSHA512-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classSHA512.html b/classSHA512.html index 69455d4b..34d2e0d6 100644 --- a/classSHA512.html +++ b/classSHA512.html @@ -513,7 +513,7 @@ Additional Inherited Members diff --git a/classSHAKE-members.html b/classSHAKE-members.html index 77c89bf8..4bfaea02 100644 --- a/classSHAKE-members.html +++ b/classSHAKE-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classSHAKE.html b/classSHAKE.html index 2ebe3cb8..61d564c3 100644 --- a/classSHAKE.html +++ b/classSHAKE.html @@ -443,7 +443,7 @@ Protected Member Functions diff --git a/classSHAKE128-members.html b/classSHAKE128-members.html index 4234aca2..a329bd8e 100644 --- a/classSHAKE128-members.html +++ b/classSHAKE128-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classSHAKE128.html b/classSHAKE128.html index e79227aa..b5f138a4 100644 --- a/classSHAKE128.html +++ b/classSHAKE128.html @@ -171,7 +171,7 @@ Additional Inherited Members diff --git a/classSHAKE256-members.html b/classSHAKE256-members.html index 81554e3b..32b0e546 100644 --- a/classSHAKE256-members.html +++ b/classSHAKE256-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classSHAKE256.html b/classSHAKE256.html index 58642c87..0aabbb48 100644 --- a/classSHAKE256.html +++ b/classSHAKE256.html @@ -171,7 +171,7 @@ Additional Inherited Members diff --git a/classShell-members.html b/classShell-members.html index 68ceadb4..6f3ee2dd 100644 --- a/classShell-members.html +++ b/classShell-members.html @@ -174,7 +174,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classShell.html b/classShell.html index 0591ca40..1cbc0e03 100644 --- a/classShell.html +++ b/classShell.html @@ -837,7 +837,7 @@ Additional Inherited Members diff --git a/classShellArguments-members.html b/classShellArguments-members.html index 4dc0228c..0d634304 100644 --- a/classShellArguments-members.html +++ b/classShellArguments-members.html @@ -96,7 +96,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classShellArguments.html b/classShellArguments.html index a453fa2f..9931410d 100644 --- a/classShellArguments.html +++ b/classShellArguments.html @@ -182,7 +182,7 @@ class Shell diff --git a/classSoftI2C-members.html b/classSoftI2C-members.html index 4cc1b915..6a04a631 100644 --- a/classSoftI2C-members.html +++ b/classSoftI2C-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classSoftI2C.html b/classSoftI2C.html index b6d43d9b..036f5024 100644 --- a/classSoftI2C.html +++ b/classSoftI2C.html @@ -346,7 +346,7 @@ unsigned int  diff --git a/classSpeck-members.html b/classSpeck-members.html index 26fb9265..a3080773 100644 --- a/classSpeck-members.html +++ b/classSpeck-members.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classSpeck.html b/classSpeck.html index d6ec54c8..c33b7799 100644 --- a/classSpeck.html +++ b/classSpeck.html @@ -415,7 +415,7 @@ Public Member Functions diff --git a/classSpeckSmall-members.html b/classSpeckSmall-members.html index 72ab8f1f..0c6bfe7c 100644 --- a/classSpeckSmall-members.html +++ b/classSpeckSmall-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classSpeckSmall.html b/classSpeckSmall.html index e5f2d531..51c654e5 100644 --- a/classSpeckSmall.html +++ b/classSpeckSmall.html @@ -319,7 +319,7 @@ Public Member Functions diff --git a/classSpeckTiny-members.html b/classSpeckTiny-members.html index ad7c92ec..0645369e 100644 --- a/classSpeckTiny-members.html +++ b/classSpeckTiny-members.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classSpeckTiny.html b/classSpeckTiny.html index 08cbffaa..f3c27c9b 100644 --- a/classSpeckTiny.html +++ b/classSpeckTiny.html @@ -428,7 +428,7 @@ class SpeckSmall< diff --git a/classTerminal-members.html b/classTerminal-members.html index c9c5939d..aa6fee8f 100644 --- a/classTerminal-members.html +++ b/classTerminal-members.html @@ -156,7 +156,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classTerminal.html b/classTerminal.html index f2152bac..a201567b 100644 --- a/classTerminal.html +++ b/classTerminal.html @@ -1443,7 +1443,7 @@ Static Public Member Functions diff --git a/classTextField-members.html b/classTextField-members.html index 45abb018..f214da5a 100644 --- a/classTextField-members.html +++ b/classTextField-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classTextField.html b/classTextField.html index 5dfd063f..4683751c 100644 --- a/classTextField.html +++ b/classTextField.html @@ -343,7 +343,7 @@ LiquidCrystal *  diff --git a/classTimeField-members.html b/classTimeField-members.html index 0aa8958d..a4c52bc7 100644 --- a/classTimeField-members.html +++ b/classTimeField-members.html @@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classTimeField.html b/classTimeField.html index 477717ac..f96b18e3 100644 --- a/classTimeField.html +++ b/classTimeField.html @@ -541,7 +541,7 @@ LiquidCrystal *  diff --git a/classTransistorNoiseSource-members.html b/classTransistorNoiseSource-members.html index c5726e40..fd16925b 100644 --- a/classTransistorNoiseSource-members.html +++ b/classTransistorNoiseSource-members.html @@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classTransistorNoiseSource.html b/classTransistorNoiseSource.html index 2a545a84..ebb422a7 100644 --- a/classTransistorNoiseSource.html +++ b/classTransistorNoiseSource.html @@ -153,7 +153,7 @@ Additional Inherited Members
    void setup() {
    // Initialize the random number generator with the application tag
    // "MyApp 1.0" and load the previous seed from EEPROM address 500.
    -
    RNG.begin("MyApp 1.0", 500);
    +
    RNG.begin("MyApp 1.0", 500);
    // Add the noise source to the list of sources known to RNG.
    RNG.addNoiseSource(noise);
    @@ -280,7 +280,7 @@ Additional Inherited Members diff --git a/classXOF-members.html b/classXOF-members.html index 4ae9569e..2d124f33 100644 --- a/classXOF-members.html +++ b/classXOF-members.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classXOF.html b/classXOF.html index c96e43d3..05d32410 100644 --- a/classXOF.html +++ b/classXOF.html @@ -508,7 +508,7 @@ Public Member Functions diff --git a/classXTS-members.html b/classXTS-members.html index fcaae164..070b07b2 100644 --- a/classXTS-members.html +++ b/classXTS-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classXTS.html b/classXTS.html index 96702d77..af61f21a 100644 --- a/classXTS.html +++ b/classXTS.html @@ -220,7 +220,7 @@ template<typename T1, typename T2 = T1> diff --git a/classXTSCommon-members.html b/classXTSCommon-members.html index d24ebc34..542349ed 100644 --- a/classXTSCommon-members.html +++ b/classXTSCommon-members.html @@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classXTSCommon.html b/classXTSCommon.html index 11db097c..9772e239 100644 --- a/classXTSCommon.html +++ b/classXTSCommon.html @@ -497,7 +497,7 @@ class XTSSingleKeyCommon diff --git a/classXTSSingleKey-members.html b/classXTSSingleKey-members.html index 0fcd20ba..bd1f5d30 100644 --- a/classXTSSingleKey-members.html +++ b/classXTSSingleKey-members.html @@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classXTSSingleKey.html b/classXTSSingleKey.html index 22c7429e..3a1cb5ee 100644 --- a/classXTSSingleKey.html +++ b/classXTSSingleKey.html @@ -218,7 +218,7 @@ template<typename T > diff --git a/classXTSSingleKeyCommon-members.html b/classXTSSingleKeyCommon-members.html index 5ae0ce38..1359ef61 100644 --- a/classXTSSingleKeyCommon-members.html +++ b/classXTSSingleKeyCommon-members.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classXTSSingleKeyCommon.html b/classXTSSingleKeyCommon.html index 3344f5ba..2513ae81 100644 --- a/classXTSSingleKeyCommon.html +++ b/classXTSSingleKeyCommon.html @@ -257,7 +257,7 @@ Protected Member Functions diff --git a/classes.html b/classes.html index c8f9ebdb..27a1222f 100644 --- a/classes.html +++ b/classes.html @@ -139,7 +139,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/crypto-rng-ring_8dox.html b/crypto-rng-ring_8dox.html index aa98fd74..2b0e1fb8 100644 --- a/crypto-rng-ring_8dox.html +++ b/crypto-rng-ring_8dox.html @@ -87,7 +87,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/crypto-rng_8dox.html b/crypto-rng_8dox.html index a9b0e261..8254a21b 100644 --- a/crypto-rng_8dox.html +++ b/crypto-rng_8dox.html @@ -87,7 +87,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/crypto.html b/crypto.html index 98883999..14ad9b94 100644 --- a/crypto.html +++ b/crypto.html @@ -391,7 +391,7 @@ Performance on ARM diff --git a/crypto_8dox.html b/crypto_8dox.html index 277c0d52..86640cb3 100644 --- a/crypto_8dox.html +++ b/crypto_8dox.html @@ -87,7 +87,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/crypto_rng.html b/crypto_rng.html index 31b5ed8e..73bd9e80 100644 --- a/crypto_rng.html +++ b/crypto_rng.html @@ -117,26 +117,26 @@ Initializing the random number generator
    #include <TransistorNoiseSource.h>

    Next we create a global variable for the noise source and specify the I/O pin that the noise circuit is connected to:

    Then in the setup() function we call RNG.begin() to start the random number generator running and call RNG.addNoiseSource() to register all of the application's noise sources:

    +

    Then in the setup() function we call RNG.begin() to start the random number generator running and call RNG.addNoiseSource() to register all of the application's noise sources:

    void setup() {
    // Initialize the random number generator with the application tag
    -
    // "MyApp 1.0" and load the previous seed from EEPROM address 950.
    -
    RNG.begin("MyApp 1.0", 950);
    +
    // "MyApp 1.0" and load the previous seed from EEPROM.
    +
    RNG.begin("MyApp 1.0");
    // Add the noise source to the list of sources known to RNG.
    RNG.addNoiseSource(noise);
    // ...
    }
    -

    The begin() function is passed two arguments: a tag string that should be different for every application and an EEPROM address to use to load and save the random number seed. The tag string ensures that different applications and versions will generate different random numbers upon first boot before the noise source has collected any entropy. If the device also has a unique serial number or a MAC address, then those can be mixed in during the setup() function after calling begin():

    +

    The begin() function is passed a tag string that should be different for every application. The tag string ensures that different applications and versions will generate different random numbers upon first boot before the noise source has collected any entropy. If the device also has a unique serial number or a MAC address, then those can be mixed in during the setup() function after calling begin():

    void setup() {
    -
    RNG.begin("MyApp 1.0", 950);
    +
    RNG.begin("MyApp 1.0");
    RNG.stir(serial_number, sizeof(serial_number));
    RNG.stir(mac_address, sizeof(mac_address));
    RNG.addNoiseSource(noise);
    ...
    }
    -

    The random number generator needs 49 bytes of EEPROM space at the specified address to store the previous seed. When the system is started next time, the previous saved seed is loaded and then deliberately overwritten with a new seed. This ensures that the device will not accidentally generate the same sequence of random numbers if it is restarted before the first automatic save of the seed.

    +

    The random number generator uses 48 bytes of space at the end of EEPROM memory to store the previous seed. When the system is started next time, the previous saved seed is loaded and then deliberately overwritten with a new seed. This ensures that the device will not accidentally generate the same sequence of random numbers if it is restarted before the first automatic save of the seed.

    By default the seed is saved once an hour, although this can be changed with RNG.setAutoSaveTime(). Because the device may be restarted before the first hour expires, there is a special case in the code: the first time that the entropy pool fills up, a save will be automatically forced.

    The Arduino Due does not have EEPROM so RNG saves the seed into the last page of system flash memory instead. The RNG class will also mix in data from the CPU's built-in True Random Number Generator (TRNG). Assuming that the CPU's TRNG is trustworthy, this should be sufficient to properly seed the random number generator. It is recommended to also mix in data from other noise sources just in case the CPU's TRNG is not trustworthy.

    To use the random number generator properly, there are some regular tasks that must be performed every time around the application's main loop(). Newly accumulated noise must be mixed in and auto-saves must be performed on a regular basis. The RNG.loop() function takes care of these tasks for us:

    @@ -190,7 +190,7 @@ Destroying secret data diff --git a/crypto_rng_ring.html b/crypto_rng_ring.html index 1a8e2c2b..04f79791 100644 --- a/crypto_rng_ring.html +++ b/crypto_rng_ring.html @@ -151,7 +151,7 @@ Connecting to the Arduino diff --git a/dir_1586d320a3b1e622174530fde769cda9.html b/dir_1586d320a3b1e622174530fde769cda9.html index 98f69c77..13ba6d98 100644 --- a/dir_1586d320a3b1e622174530fde769cda9.html +++ b/dir_1586d320a3b1e622174530fde769cda9.html @@ -102,7 +102,7 @@ Files diff --git a/dir_1de32c476debcefedf4aa8bb43bea551.html b/dir_1de32c476debcefedf4aa8bb43bea551.html index 654bfc05..738e9665 100644 --- a/dir_1de32c476debcefedf4aa8bb43bea551.html +++ b/dir_1de32c476debcefedf4aa8bb43bea551.html @@ -106,7 +106,7 @@ Files diff --git a/dir_3dd03323535933fb3f714c41ff7a94da.html b/dir_3dd03323535933fb3f714c41ff7a94da.html index 0fb8614f..43d3e550 100644 --- a/dir_3dd03323535933fb3f714c41ff7a94da.html +++ b/dir_3dd03323535933fb3f714c41ff7a94da.html @@ -94,7 +94,7 @@ Files diff --git a/dir_470c03f38356b1f63943514897cb198b.html b/dir_470c03f38356b1f63943514897cb198b.html index 6000583c..95eaa484 100644 --- a/dir_470c03f38356b1f63943514897cb198b.html +++ b/dir_470c03f38356b1f63943514897cb198b.html @@ -94,7 +94,7 @@ Files diff --git a/dir_48f64e79f12bd77ba047e9e436ec978c.html b/dir_48f64e79f12bd77ba047e9e436ec978c.html index 6d22ca81..4d3d9ed4 100644 --- a/dir_48f64e79f12bd77ba047e9e436ec978c.html +++ b/dir_48f64e79f12bd77ba047e9e436ec978c.html @@ -122,7 +122,7 @@ Files diff --git a/dir_5e87a7229a108582288ef7eda1233dc3.html b/dir_5e87a7229a108582288ef7eda1233dc3.html index 01d62c36..4c94e64b 100644 --- a/dir_5e87a7229a108582288ef7eda1233dc3.html +++ b/dir_5e87a7229a108582288ef7eda1233dc3.html @@ -94,7 +94,7 @@ Files diff --git a/dir_6591a2127a29f6cea3994dcb5b0596d1.html b/dir_6591a2127a29f6cea3994dcb5b0596d1.html index 75fbc6d3..f7198e16 100644 --- a/dir_6591a2127a29f6cea3994dcb5b0596d1.html +++ b/dir_6591a2127a29f6cea3994dcb5b0596d1.html @@ -106,7 +106,7 @@ Files diff --git a/dir_7e6ab9b017486261fe80629d442521f0.html b/dir_7e6ab9b017486261fe80629d442521f0.html index 5f7069af..df65e7b6 100644 --- a/dir_7e6ab9b017486261fe80629d442521f0.html +++ b/dir_7e6ab9b017486261fe80629d442521f0.html @@ -94,7 +94,7 @@ Files diff --git a/dir_9a34040863d1190c0e01b23e6b44de01.html b/dir_9a34040863d1190c0e01b23e6b44de01.html index b29b1cdb..71c1d1fd 100644 --- a/dir_9a34040863d1190c0e01b23e6b44de01.html +++ b/dir_9a34040863d1190c0e01b23e6b44de01.html @@ -96,7 +96,7 @@ Files diff --git a/dir_bc0718b08fb2015b8e59c47b2805f60c.html b/dir_bc0718b08fb2015b8e59c47b2805f60c.html index c9beb9cd..17902b11 100644 --- a/dir_bc0718b08fb2015b8e59c47b2805f60c.html +++ b/dir_bc0718b08fb2015b8e59c47b2805f60c.html @@ -116,7 +116,7 @@ Directories diff --git a/dir_be059bf9978ae156837504b1b8a7568c.html b/dir_be059bf9978ae156837504b1b8a7568c.html index 64ed8ebf..5e789aee 100644 --- a/dir_be059bf9978ae156837504b1b8a7568c.html +++ b/dir_be059bf9978ae156837504b1b8a7568c.html @@ -94,7 +94,7 @@ Files diff --git a/dir_e2ce51835550ba18edf07a8311722290.html b/dir_e2ce51835550ba18edf07a8311722290.html index 1798c024..856fac5d 100644 --- a/dir_e2ce51835550ba18edf07a8311722290.html +++ b/dir_e2ce51835550ba18edf07a8311722290.html @@ -240,7 +240,7 @@ Files diff --git a/dir_f34881fcf60f680b800190d5274dfaea.html b/dir_f34881fcf60f680b800190d5274dfaea.html index a2998b43..49a3104d 100644 --- a/dir_f34881fcf60f680b800190d5274dfaea.html +++ b/dir_f34881fcf60f680b800190d5274dfaea.html @@ -106,7 +106,7 @@ Files diff --git a/dir_f9b96888882c2691b8eeaeafd1b9501d.html b/dir_f9b96888882c2691b8eeaeafd1b9501d.html index d29893d0..b69144de 100644 --- a/dir_f9b96888882c2691b8eeaeafd1b9501d.html +++ b/dir_f9b96888882c2691b8eeaeafd1b9501d.html @@ -102,7 +102,7 @@ Files diff --git a/dmd-demo_8dox.html b/dmd-demo_8dox.html index 2723153d..f3d79a01 100644 --- a/dmd-demo_8dox.html +++ b/dmd-demo_8dox.html @@ -87,7 +87,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/dmd-running-figure_8dox.html b/dmd-running-figure_8dox.html index ca20374e..d71f5b54 100644 --- a/dmd-running-figure_8dox.html +++ b/dmd-running-figure_8dox.html @@ -87,7 +87,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/dmd_demo.html b/dmd_demo.html index 73fa7dcb..f39ec8b1 100644 --- a/dmd_demo.html +++ b/dmd_demo.html @@ -236,7 +236,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/dmd_running_figure.html b/dmd_running_figure.html index aeb77960..f634032b 100644 --- a/dmd_running_figure.html +++ b/dmd_running_figure.html @@ -430,7 +430,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/files.html b/files.html index 056716de..f02ad440 100644 --- a/files.html +++ b/files.html @@ -231,7 +231,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions.html b/functions.html index 31320321..dcab3995 100644 --- a/functions.html +++ b/functions.html @@ -193,7 +193,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_b.html b/functions_b.html index 08fff64c..bea40534 100644 --- a/functions_b.html +++ b/functions_b.html @@ -138,7 +138,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : Terminal
  • begin() -: RNGClass +: RNGClass , Shell , Terminal
  • @@ -208,7 +208,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_c.html b/functions_c.html index fe06c667..c88b734c 100644 --- a/functions_c.html +++ b/functions_c.html @@ -261,7 +261,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_d.html b/functions_d.html index 7760e041..3f1b35cd 100644 --- a/functions_d.html +++ b/functions_d.html @@ -300,7 +300,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_e.html b/functions_e.html index 9b8a016e..0d7aa310 100644 --- a/functions_e.html +++ b/functions_e.html @@ -219,7 +219,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_enum.html b/functions_enum.html index 268b092d..872302ec 100644 --- a/functions_enum.html +++ b/functions_enum.html @@ -114,7 +114,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_eval.html b/functions_eval.html index 321357dc..eee933b4 100644 --- a/functions_eval.html +++ b/functions_eval.html @@ -168,7 +168,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_f.html b/functions_f.html index 86a6efb7..be4aecf7 100644 --- a/functions_f.html +++ b/functions_f.html @@ -187,7 +187,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func.html b/functions_func.html index 472264ba..9fdb31d8 100644 --- a/functions_func.html +++ b/functions_func.html @@ -186,7 +186,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_b.html b/functions_func_b.html index fde803d0..0e1a9b52 100644 --- a/functions_func_b.html +++ b/functions_func_b.html @@ -131,7 +131,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : Terminal
  • begin() -: RNGClass +: RNGClass , Shell , Terminal
  • @@ -194,7 +194,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_c.html b/functions_func_c.html index a77bdeec..aa7a35e5 100644 --- a/functions_func_c.html +++ b/functions_func_c.html @@ -253,7 +253,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_d.html b/functions_func_d.html index 6603f8a8..f2a19f90 100644 --- a/functions_func_d.html +++ b/functions_func_d.html @@ -262,7 +262,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_e.html b/functions_func_e.html index 232fc250..f491725c 100644 --- a/functions_func_e.html +++ b/functions_func_e.html @@ -218,7 +218,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_f.html b/functions_func_f.html index 505525a5..8ee6316a 100644 --- a/functions_func_f.html +++ b/functions_func_f.html @@ -180,7 +180,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_g.html b/functions_func_g.html index e76ba3d4..0138afc7 100644 --- a/functions_func_g.html +++ b/functions_func_g.html @@ -144,7 +144,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_h.html b/functions_func_h.html index 38f4039b..5da3efef 100644 --- a/functions_func_h.html +++ b/functions_func_h.html @@ -161,7 +161,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_i.html b/functions_func_i.html index 66624444..35bc3f9d 100644 --- a/functions_func_i.html +++ b/functions_func_i.html @@ -202,7 +202,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_k.html b/functions_func_k.html index da422ae7..ccb2ccdf 100644 --- a/functions_func_k.html +++ b/functions_func_k.html @@ -153,7 +153,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_l.html b/functions_func_l.html index 3cc4d998..80872234 100644 --- a/functions_func_l.html +++ b/functions_func_l.html @@ -131,7 +131,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : Field
  • LCD() -: LCD +: LCD
  • led() : Charlieplex @@ -157,7 +157,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_m.html b/functions_func_m.html index 8e375a45..26ea70cb 100644 --- a/functions_func_m.html +++ b/functions_func_m.html @@ -160,7 +160,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_n.html b/functions_func_n.html index f8055743..f4ec0bb6 100644 --- a/functions_func_n.html +++ b/functions_func_n.html @@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_o.html b/functions_func_o.html index ae448a96..0d7cb3ec 100644 --- a/functions_func_o.html +++ b/functions_func_o.html @@ -149,7 +149,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_p.html b/functions_func_p.html index 658320fa..465ee416 100644 --- a/functions_func_p.html +++ b/functions_func_p.html @@ -179,7 +179,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_r.html b/functions_func_r.html index 67b00abb..3377cf0e 100644 --- a/functions_func_r.html +++ b/functions_func_r.html @@ -228,7 +228,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_s.html b/functions_func_s.html index 1dddbace..f4088319 100644 --- a/functions_func_s.html +++ b/functions_func_s.html @@ -427,7 +427,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_t.html b/functions_func_t.html index 005d18d5..c0bf0e3f 100644 --- a/functions_func_t.html +++ b/functions_func_t.html @@ -161,7 +161,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_u.html b/functions_func_u.html index c07f911b..e95d3b06 100644 --- a/functions_func_u.html +++ b/functions_func_u.html @@ -167,7 +167,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_v.html b/functions_func_v.html index 7cb0fc43..42393c92 100644 --- a/functions_func_v.html +++ b/functions_func_v.html @@ -139,7 +139,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_w.html b/functions_func_w.html index 1615cddd..41f7548e 100644 --- a/functions_func_w.html +++ b/functions_func_w.html @@ -166,7 +166,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_x.html b/functions_func_x.html index bf09d53c..1de885d3 100644 --- a/functions_func_x.html +++ b/functions_func_x.html @@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_~.html b/functions_func_~.html index 74c75f74..7754bc8d 100644 --- a/functions_func_~.html +++ b/functions_func_~.html @@ -242,7 +242,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_g.html b/functions_g.html index 394a2ed3..d73fbf1e 100644 --- a/functions_g.html +++ b/functions_g.html @@ -148,7 +148,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_h.html b/functions_h.html index 36666a28..0b8c31a3 100644 --- a/functions_h.html +++ b/functions_h.html @@ -166,7 +166,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_i.html b/functions_i.html index 781cff23..6288d83d 100644 --- a/functions_i.html +++ b/functions_i.html @@ -206,7 +206,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_k.html b/functions_k.html index 7429a374..8de9244e 100644 --- a/functions_k.html +++ b/functions_k.html @@ -154,7 +154,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_l.html b/functions_l.html index d22ae388..04093eb7 100644 --- a/functions_l.html +++ b/functions_l.html @@ -132,7 +132,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : Field
  • LCD() -: LCD +: LCD
  • led() : Charlieplex @@ -161,7 +161,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_m.html b/functions_m.html index 4991da90..32ce959d 100644 --- a/functions_m.html +++ b/functions_m.html @@ -174,7 +174,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_n.html b/functions_n.html index bba54974..6c939a47 100644 --- a/functions_n.html +++ b/functions_n.html @@ -150,7 +150,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_o.html b/functions_o.html index a654d0e4..f04b1d08 100644 --- a/functions_o.html +++ b/functions_o.html @@ -150,7 +150,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_p.html b/functions_p.html index 2b67cd6b..8607f888 100644 --- a/functions_p.html +++ b/functions_p.html @@ -183,7 +183,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_r.html b/functions_r.html index 5f709270..c8bf81ec 100644 --- a/functions_r.html +++ b/functions_r.html @@ -235,7 +235,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_rela.html b/functions_rela.html index 343e3685..61a3181b 100644 --- a/functions_rela.html +++ b/functions_rela.html @@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_s.html b/functions_s.html index 78898a4c..056bb15c 100644 --- a/functions_s.html +++ b/functions_s.html @@ -128,12 +128,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  • save() : RNGClass
  • -
  • ScreenSaverMode -: LCD -
  • screenSaverMode() : LCD
  • +
  • ScreenSaverMode +: LCD +
  • scroll() : Bitmap
  • @@ -444,7 +444,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_t.html b/functions_t.html index d58ffc67..7db31833 100644 --- a/functions_t.html +++ b/functions_t.html @@ -168,7 +168,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_type.html b/functions_type.html index 16aa4b64..7ef9a4f9 100644 --- a/functions_type.html +++ b/functions_type.html @@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_u.html b/functions_u.html index 6d4aa1f3..b1bb819b 100644 --- a/functions_u.html +++ b/functions_u.html @@ -168,7 +168,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_v.html b/functions_v.html index 0e30a370..814788f1 100644 --- a/functions_v.html +++ b/functions_v.html @@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_vars.html b/functions_vars.html index 633553de..bc4e3673 100644 --- a/functions_vars.html +++ b/functions_vars.html @@ -157,7 +157,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_w.html b/functions_w.html index 4dca23a0..68092d68 100644 --- a/functions_w.html +++ b/functions_w.html @@ -174,7 +174,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_x.html b/functions_x.html index 4691efe8..317d4325 100644 --- a/functions_x.html +++ b/functions_x.html @@ -144,7 +144,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_y.html b/functions_y.html index c9c54ebb..584583e0 100644 --- a/functions_y.html +++ b/functions_y.html @@ -135,7 +135,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_~.html b/functions_~.html index 366efe43..fd2a56b6 100644 --- a/functions_~.html +++ b/functions_~.html @@ -243,7 +243,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/group__power__save.html b/group__power__save.html index 63a904f0..58018ea6 100644 --- a/group__power__save.html +++ b/group__power__save.html @@ -201,7 +201,7 @@ void  diff --git a/hierarchy.html b/hierarchy.html index 214e4352..6f3aacde 100644 --- a/hierarchy.html +++ b/hierarchy.html @@ -179,7 +179,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/index.html b/index.html index 595456ae..1e69d99e 100644 --- a/index.html +++ b/index.html @@ -165,7 +165,7 @@ Other diff --git a/ir-dumpir_8dox.html b/ir-dumpir_8dox.html index 30d62ee4..fc6c8f17 100644 --- a/ir-dumpir_8dox.html +++ b/ir-dumpir_8dox.html @@ -87,7 +87,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/ir-snake_8dox.html b/ir-snake_8dox.html index 0787068c..55aed3ff 100644 --- a/ir-snake_8dox.html +++ b/ir-snake_8dox.html @@ -87,7 +87,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/ir_dumpir.html b/ir_dumpir.html index cccbcc79..e4e26864 100644 --- a/ir_dumpir.html +++ b/ir_dumpir.html @@ -283,7 +283,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/ir_snake.html b/ir_snake.html index 9c87439f..232390f0 100644 --- a/ir_snake.html +++ b/ir_snake.html @@ -273,7 +273,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/lcd-form_8dox.html b/lcd-form_8dox.html index 0391fba3..8ccd84b8 100644 --- a/lcd-form_8dox.html +++ b/lcd-form_8dox.html @@ -87,7 +87,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/lcd-helloworld_8dox.html b/lcd-helloworld_8dox.html index 191598db..f0ffbebe 100644 --- a/lcd-helloworld_8dox.html +++ b/lcd-helloworld_8dox.html @@ -87,7 +87,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/lcd_form.html b/lcd_form.html index 81dfd2a6..e12242d9 100644 --- a/lcd_form.html +++ b/lcd_form.html @@ -216,7 +216,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/lcd_hello_world.html b/lcd_hello_world.html index d936f273..069f6a7f 100644 --- a/lcd_hello_world.html +++ b/lcd_hello_world.html @@ -166,7 +166,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/mainpage_8dox.html b/mainpage_8dox.html index a7b484c1..438e61cc 100644 --- a/mainpage_8dox.html +++ b/mainpage_8dox.html @@ -87,7 +87,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/modules.html b/modules.html index 76d8b3f6..d9c75f01 100644 --- a/modules.html +++ b/modules.html @@ -87,7 +87,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/newhope-small_8dox.html b/newhope-small_8dox.html index d60d607d..c782ca8c 100644 --- a/newhope-small_8dox.html +++ b/newhope-small_8dox.html @@ -87,7 +87,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/newhope_small.html b/newhope_small.html index b78174ba..cb871eb5 100644 --- a/newhope_small.html +++ b/newhope_small.html @@ -250,7 +250,7 @@ Summary diff --git a/pages.html b/pages.html index cf857287..4e929af3 100644 --- a/pages.html +++ b/pages.html @@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/search/all_1.js b/search/all_1.js index 7918cfdb..81b4ec9c 100644 --- a/search/all_1.js +++ b/search/all_1.js @@ -4,7 +4,7 @@ var searchData= ['backlightonselect',['BacklightOnSelect',['../classLCD.html#a264bf94308c95d8598426e13dc8cdb28a781f3c5e42506bf4f86ba06d69b23d35',1,'LCD']]], ['backlightpin',['backlightPin',['../classLCD.html#a171f59ba80e7775ebd3a399f56482a9c',1,'LCD']]], ['backspace',['backspace',['../classTerminal.html#ae4aec627f980fe0d26653401785d41bc',1,'Terminal']]], - ['begin',['begin',['../classRNGClass.html#a7f1aab3c324f8e8a424d683425e0fcf8',1,'RNGClass::begin()'],['../classShell.html#ad9acba905b6e0b661cce19d57c067990',1,'Shell::begin(Stream &stream, size_t maxHistory=0, Terminal::Mode mode=Serial)'],['../classShell.html#a3ff0cc86725388d4fe92520e5a18ad92',1,'Shell::begin(Client &client, size_t maxHistory=0, Terminal::Mode mode=Telnet)'],['../classTerminal.html#a6bf417195a7d2a2fab6b3518f25764a2',1,'Terminal::begin()']]], + ['begin',['begin',['../classRNGClass.html#a77eb101a225ce541800ac1361a92b1a6',1,'RNGClass::begin()'],['../classShell.html#ad9acba905b6e0b661cce19d57c067990',1,'Shell::begin(Stream &stream, size_t maxHistory=0, Terminal::Mode mode=Serial)'],['../classShell.html#a3ff0cc86725388d4fe92520e5a18ad92',1,'Shell::begin(Client &client, size_t maxHistory=0, Terminal::Mode mode=Telnet)'],['../classTerminal.html#a6bf417195a7d2a2fab6b3518f25764a2',1,'Terminal::begin()']]], ['beginsession',['beginSession',['../classLoginShell.html#a88a72760d4dc960c32e2fa4b691f9558',1,'LoginShell::beginSession()'],['../classShell.html#a3ad32b7cd3b48c78953ab9f7384d5a58',1,'Shell::beginSession()']]], ['bignumberutil',['BigNumberUtil',['../classBigNumberUtil.html',1,'']]], ['bitmap',['Bitmap',['../classBitmap.html',1,'Bitmap'],['../classBitmap.html#a40526748415c8bbc58a8510d636c20f4',1,'Bitmap::Bitmap()']]], diff --git a/search/all_10.js b/search/all_10.js index 2c85e2ef..0beb4659 100644 --- a/search/all_10.js +++ b/search/all_10.js @@ -4,7 +4,7 @@ var searchData= ['snake_20video_20game_20using_20an_20infrared_20remote_20control',['Snake Video Game Using an Infrared Remote Control',['../ir_snake.html',1,'']]], ['small_20memory_20footprint_20new_20hope',['Small Memory Footprint New Hope',['../newhope_small.html',1,'']]], ['save',['save',['../classRNGClass.html#a139584fb249148e2058d1d645d090db7',1,'RNGClass']]], - ['screensavermode',['ScreenSaverMode',['../classLCD.html#a264bf94308c95d8598426e13dc8cdb28',1,'LCD::ScreenSaverMode()'],['../classLCD.html#a1917fa285f81f476b4c7cc20d15456b8',1,'LCD::screenSaverMode() const ']]], + ['screensavermode',['screenSaverMode',['../classLCD.html#a1917fa285f81f476b4c7cc20d15456b8',1,'LCD::screenSaverMode() const '],['../classLCD.html#a264bf94308c95d8598426e13dc8cdb28',1,'LCD::ScreenSaverMode()']]], ['scroll',['scroll',['../classBitmap.html#ae08eb6f9086f9923d8dc83a469ae4c4a',1,'Bitmap::scroll(int dx, int dy, Color fillColor=Black)'],['../classBitmap.html#af79ad4432297ff453fddc55625fec485',1,'Bitmap::scroll(int x, int y, int width, int height, int dx, int dy, Color fillColor=Black)']]], ['scrolldown',['scrollDown',['../classTerminal.html#a661474bb4790aa82178b3ce9a85e5dea',1,'Terminal']]], ['scrollup',['scrollUp',['../classTerminal.html#a30d8d69fd84cafc6c2c94ae6fc65b690',1,'Terminal']]], diff --git a/search/all_a.js b/search/all_a.js index bd27634d..41efafab 100644 --- a/search/all_a.js +++ b/search/all_a.js @@ -1,7 +1,7 @@ var searchData= [ ['label',['label',['../classField.html#aaa861ef917130c989a955bc75c683afe',1,'Field']]], - ['lcd',['LCD',['../classLCD.html',1,'LCD'],['../classLCD.html#a00bb2db1390721abc7b24ac4b8c276c8',1,'LCD::LCD()'],['../classLCD.html#a067bc741cf27f143aba5d9f147908401',1,'LCD::LCD(uint8_t pin9)'],['../classLCD.html#a203d268bef6c61fa293562dbb0e9f51e',1,'LCD::LCD(uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)'],['../classField.html#a5cf21bf958a71e51feac9e1bf9f599d1',1,'Field::lcd()']]], + ['lcd',['LCD',['../classLCD.html',1,'LCD'],['../classField.html#a5cf21bf958a71e51feac9e1bf9f599d1',1,'Field::lcd()'],['../classLCD.html#a00bb2db1390721abc7b24ac4b8c276c8',1,'LCD::LCD()'],['../classLCD.html#a067bc741cf27f143aba5d9f147908401',1,'LCD::LCD(uint8_t pin9)'],['../classLCD.html#a203d268bef6c61fa293562dbb0e9f51e',1,'LCD::LCD(uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)']]], ['lcd_2dform_2edox',['lcd-form.dox',['../lcd-form_8dox.html',1,'']]], ['lcd_2dhelloworld_2edox',['lcd-helloworld.dox',['../lcd-helloworld_8dox.html',1,'']]], ['led',['led',['../classCharlieplex.html#a90fd09f24b62424b0b7b8bcdb0140b9d',1,'Charlieplex']]], diff --git a/search/functions_1.js b/search/functions_1.js index 532e44df..8f09ef2a 100644 --- a/search/functions_1.js +++ b/search/functions_1.js @@ -2,7 +2,7 @@ var searchData= [ ['backlightpin',['backlightPin',['../classLCD.html#a171f59ba80e7775ebd3a399f56482a9c',1,'LCD']]], ['backspace',['backspace',['../classTerminal.html#ae4aec627f980fe0d26653401785d41bc',1,'Terminal']]], - ['begin',['begin',['../classRNGClass.html#a7f1aab3c324f8e8a424d683425e0fcf8',1,'RNGClass::begin()'],['../classShell.html#ad9acba905b6e0b661cce19d57c067990',1,'Shell::begin(Stream &stream, size_t maxHistory=0, Terminal::Mode mode=Serial)'],['../classShell.html#a3ff0cc86725388d4fe92520e5a18ad92',1,'Shell::begin(Client &client, size_t maxHistory=0, Terminal::Mode mode=Telnet)'],['../classTerminal.html#a6bf417195a7d2a2fab6b3518f25764a2',1,'Terminal::begin()']]], + ['begin',['begin',['../classRNGClass.html#a77eb101a225ce541800ac1361a92b1a6',1,'RNGClass::begin()'],['../classShell.html#ad9acba905b6e0b661cce19d57c067990',1,'Shell::begin(Stream &stream, size_t maxHistory=0, Terminal::Mode mode=Serial)'],['../classShell.html#a3ff0cc86725388d4fe92520e5a18ad92',1,'Shell::begin(Client &client, size_t maxHistory=0, Terminal::Mode mode=Telnet)'],['../classTerminal.html#a6bf417195a7d2a2fab6b3518f25764a2',1,'Terminal::begin()']]], ['beginsession',['beginSession',['../classLoginShell.html#a88a72760d4dc960c32e2fa4b691f9558',1,'LoginShell::beginSession()'],['../classShell.html#a3ad32b7cd3b48c78953ab9f7384d5a58',1,'Shell::beginSession()']]], ['bitmap',['Bitmap',['../classBitmap.html#a40526748415c8bbc58a8510d636c20f4',1,'Bitmap']]], ['bitsperpixel',['bitsPerPixel',['../classBitmap.html#ad18d3d5a1e77d541a95e93ad1f958411',1,'Bitmap']]], diff --git a/search/functions_a.js b/search/functions_a.js index 9b3cf49b..f9b30a30 100644 --- a/search/functions_a.js +++ b/search/functions_a.js @@ -1,7 +1,7 @@ var searchData= [ ['label',['label',['../classField.html#aaa861ef917130c989a955bc75c683afe',1,'Field']]], - ['lcd',['LCD',['../classLCD.html#a00bb2db1390721abc7b24ac4b8c276c8',1,'LCD::LCD()'],['../classLCD.html#a067bc741cf27f143aba5d9f147908401',1,'LCD::LCD(uint8_t pin9)'],['../classLCD.html#a203d268bef6c61fa293562dbb0e9f51e',1,'LCD::LCD(uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)'],['../classField.html#a5cf21bf958a71e51feac9e1bf9f599d1',1,'Field::lcd()']]], + ['lcd',['lcd',['../classField.html#a5cf21bf958a71e51feac9e1bf9f599d1',1,'Field::lcd()'],['../classLCD.html#a00bb2db1390721abc7b24ac4b8c276c8',1,'LCD::LCD()'],['../classLCD.html#a067bc741cf27f143aba5d9f147908401',1,'LCD::LCD(uint8_t pin9)'],['../classLCD.html#a203d268bef6c61fa293562dbb0e9f51e',1,'LCD::LCD(uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)']]], ['led',['led',['../classCharlieplex.html#a90fd09f24b62424b0b7b8bcdb0140b9d',1,'Charlieplex']]], ['listfield',['ListField',['../classListField.html#a118501da7edb0b0bc6b493734975b4e9',1,'ListField::ListField(const String &label)'],['../classListField.html#aa303898a1f74b52c1c4982653de488b7',1,'ListField::ListField(Form &form, const String &label, ListItems items, int value=0)']]], ['loginshell',['LoginShell',['../classLoginShell.html#a8a6e6c259bc6415eb9cfbb13980e31d4',1,'LoginShell']]], diff --git a/shell-serial_8dox.html b/shell-serial_8dox.html index d581d577..14e80609 100644 --- a/shell-serial_8dox.html +++ b/shell-serial_8dox.html @@ -87,7 +87,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/shell-telnet_8dox.html b/shell-telnet_8dox.html index e003df0d..a3973282 100644 --- a/shell-telnet_8dox.html +++ b/shell-telnet_8dox.html @@ -87,7 +87,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/shell_serial.html b/shell_serial.html index baea5474..4d428b8b 100644 --- a/shell_serial.html +++ b/shell_serial.html @@ -156,7 +156,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/shell_telnet.html b/shell_telnet.html index d9e67dfe..3ecb1fe6 100644 --- a/shell_telnet.html +++ b/shell_telnet.html @@ -165,7 +165,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/structNewHopePrivateKey.html b/structNewHopePrivateKey.html index a6a3a48e..0a180ee0 100644 --- a/structNewHopePrivateKey.html +++ b/structNewHopePrivateKey.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/structRTCAlarm.html b/structRTCAlarm.html index 0a75092c..37f7e1a1 100644 --- a/structRTCAlarm.html +++ b/structRTCAlarm.html @@ -200,7 +200,7 @@ uint8_t  diff --git a/structRTCDate.html b/structRTCDate.html index aaf002d9..1e10ca75 100644 --- a/structRTCDate.html +++ b/structRTCDate.html @@ -123,7 +123,7 @@ uint8_t  diff --git a/structRTCTime.html b/structRTCTime.html index 8ba6533c..a7ccee69 100644 --- a/structRTCTime.html +++ b/structRTCTime.html @@ -123,7 +123,7 @@ uint8_t