From 77f9295247c45040a3f5469d929d835540b5d52a Mon Sep 17 00:00:00 2001 From: Rhys Weatherley Date: Sat, 13 Feb 2016 07:01:47 +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 | 2 +- Crypto_8h_source.html | 2 +- Curve25519_8cpp_source.html | 2 +- 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 | 434 +++++------- EAX_8h_source.html | 153 ++--- EEPROM24_8cpp_source.html | 2 +- EEPROM24_8h_source.html | 2 +- Ed25519_8cpp_source.html | 2 +- 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 | 10 +- GCM_8h_source.html | 2 +- GF128_8cpp_source.html | 509 ++++++++++++++ GF128_8h_source.html | 145 ++++ GHASH_8cpp_source.html | 169 ++--- GHASH_8h_source.html | 18 +- 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 +- Melody_8cpp_source.html | 2 +- Melody_8h_source.html | 2 +- Mono5x7_8h_source.html | 2 +- NoiseSource_8cpp_source.html | 2 +- NoiseSource_8h_source.html | 2 +- OFB_8cpp_source.html | 2 +- OFB_8h_source.html | 2 +- OMAC_8cpp_source.html | 216 ++++++ OMAC_8h_source.html | 160 +++++ 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 | 2 +- RNG_8h_source.html | 2 +- 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 +- SoftI2C_8cpp_source.html | 2 +- SoftI2C_8h_source.html | 2 +- SpeckSmall_8cpp_source.html | 723 ++++++++++++++++++++ SpeckSmall_8h_source.html | 149 ++++ SpeckTiny_8cpp_source.html | 604 ++++++++++++++++ SpeckTiny_8h_source.html | 162 +++++ Speck_8cpp_source.html | 6 +- Speck_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 +- alarm-clock_8dox.html | 2 +- alarm_clock.html | 2 +- annotated.html | 63 +- 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 | 10 +- 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 | 27 +- classBlockCipher.png | Bin 1456 -> 1450 bytes 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 | 16 +- 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 | 4 +- classEAX.html | 4 +- classEAXCommon-members.html | 4 +- classEAXCommon.html | 28 +- 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 | 105 +++ classGF128.html | 302 ++++++++ classGHASH-members.html | 2 +- classGHASH.html | 8 +- 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 +- classMelody-members.html | 2 +- classMelody.html | 2 +- classNoiseSource-members.html | 2 +- classNoiseSource.html | 2 +- classOFB-members.html | 2 +- classOFB.html | 2 +- classOFBCommon-members.html | 2 +- classOFBCommon.html | 2 +- classOMAC-members.html | 110 +++ classOMAC.html | 395 +++++++++++ classPoly1305-members.html | 2 +- classPoly1305.html | 2 +- classRNGClass-members.html | 2 +- classRNGClass.html | 2 +- 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 | 2 +- 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 +- classSoftI2C-members.html | 2 +- classSoftI2C.html | 2 +- classSpeck-members.html | 2 +- classSpeck.html | 6 +- classSpeckSmall-members.html | 113 +++ classSpeckSmall.html | 327 +++++++++ classSpeckSmall.png | Bin 0 -> 646 bytes classSpeckTiny-members.html | 112 +++ classSpeckTiny.html | 436 ++++++++++++ classSpeckTiny.png | Bin 0 -> 648 bytes classTextField-members.html | 2 +- classTextField.html | 2 +- classTimeField-members.html | 2 +- classTimeField.html | 2 +- classTransistorNoiseSource-members.html | 2 +- classTransistorNoiseSource.html | 2 +- classes.html | 68 +- crypto-rng-ring_8dox.html | 2 +- crypto-rng_8dox.html | 2 +- crypto.html | 70 +- crypto_8dox.html | 2 +- crypto_rng.html | 2 +- crypto_rng_ring.html | 2 +- dir_1586d320a3b1e622174530fde769cda9.html | 2 +- dir_3dd03323535933fb3f714c41ff7a94da.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 | 18 +- 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 | 112 +-- functions.html | 2 +- functions_b.html | 9 +- functions_c.html | 6 +- functions_d.html | 13 +- functions_e.html | 4 +- functions_enum.html | 2 +- functions_eval.html | 2 +- functions_f.html | 9 +- functions_func.html | 2 +- functions_func_b.html | 7 +- functions_func_c.html | 6 +- functions_func_d.html | 15 +- functions_func_e.html | 4 +- functions_func_f.html | 3 +- functions_func_g.html | 2 +- functions_func_h.html | 2 +- functions_func_i.html | 10 +- functions_func_k.html | 4 +- functions_func_l.html | 4 +- functions_func_m.html | 6 +- functions_func_n.html | 2 +- functions_func_o.html | 5 +- functions_func_p.html | 2 +- functions_func_r.html | 2 +- functions_func_s.html | 13 +- functions_func_t.html | 2 +- functions_func_u.html | 3 +- functions_func_v.html | 2 +- functions_func_w.html | 2 +- functions_func_~.html | 5 +- functions_g.html | 2 +- functions_h.html | 2 +- functions_i.html | 8 +- functions_k.html | 4 +- functions_l.html | 4 +- functions_m.html | 6 +- functions_n.html | 2 +- functions_o.html | 5 +- functions_p.html | 2 +- functions_r.html | 2 +- functions_s.html | 19 +- functions_t.html | 2 +- functions_type.html | 2 +- functions_u.html | 3 +- functions_v.html | 2 +- functions_vars.html | 2 +- functions_w.html | 2 +- functions_y.html | 2 +- functions_~.html | 5 +- group__power__save.html | 2 +- hierarchy.html | 117 ++-- index.html | 4 +- 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 +- pages.html | 2 +- search/all_1.js | 4 +- search/all_10.js | 9 +- search/all_12.js | 2 +- search/all_16.js | 1 + search/all_2.js | 2 +- search/all_3.js | 4 +- search/all_4.js | 2 +- search/all_5.js | 2 +- search/all_6.js | 1 + search/all_8.js | 2 + search/all_9.js | 2 +- search/all_a.js | 2 +- search/all_b.js | 5 +- search/all_d.js | 1 + search/classes_10.js | 3 +- search/classes_6.js | 1 + search/classes_d.js | 3 +- search/functions_1.js | 4 +- search/functions_10.js | 7 +- search/functions_12.js | 2 +- search/functions_15.js | 1 + search/functions_2.js | 2 +- search/functions_3.js | 4 +- search/functions_4.js | 2 +- search/functions_5.js | 2 +- search/functions_8.js | 2 + search/functions_9.js | 2 +- search/functions_a.js | 2 +- search/functions_b.js | 5 +- search/functions_d.js | 1 + structRTCAlarm.html | 2 +- structRTCDate.html | 2 +- structRTCTime.html | 2 +- 389 files changed, 5668 insertions(+), 1095 deletions(-) create mode 100644 GF128_8cpp_source.html create mode 100644 GF128_8h_source.html create mode 100644 OMAC_8cpp_source.html create mode 100644 OMAC_8h_source.html create mode 100644 SpeckSmall_8cpp_source.html create mode 100644 SpeckSmall_8h_source.html create mode 100644 SpeckTiny_8cpp_source.html create mode 100644 SpeckTiny_8h_source.html create mode 100644 classGF128-members.html create mode 100644 classGF128.html create mode 100644 classOMAC-members.html create mode 100644 classOMAC.html create mode 100644 classSpeckSmall-members.html create mode 100644 classSpeckSmall.html create mode 100644 classSpeckSmall.png create mode 100644 classSpeckTiny-members.html create mode 100644 classSpeckTiny.html create mode 100644 classSpeckTiny.png diff --git a/AES128_8cpp_source.html b/AES128_8cpp_source.html index 9bedb6c1..4cb985b3 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 fabfb25a..3c4ff069 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 b14d7fd7..480d8577 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 47bae3e7..1a427735 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 4d3ddaaa..42e787ee 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 d1465a41..595c620c 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 9acfdb90..e8e0f6c4 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 c32ca8bd..b247798f 100644 --- a/BLAKE2b_8cpp_source.html +++ b/BLAKE2b_8cpp_source.html @@ -331,7 +331,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/BLAKE2b_8h_source.html b/BLAKE2b_8h_source.html index 64adb158..1e1f53aa 100644 --- a/BLAKE2b_8h_source.html +++ b/BLAKE2b_8h_source.html @@ -162,7 +162,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/BLAKE2s_8cpp_source.html b/BLAKE2s_8cpp_source.html index d12dbcd7..c7c09fa3 100644 --- a/BLAKE2s_8cpp_source.html +++ b/BLAKE2s_8cpp_source.html @@ -323,7 +323,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/BLAKE2s_8h_source.html b/BLAKE2s_8h_source.html index 0caa29aa..54020a45 100644 --- a/BLAKE2s_8h_source.html +++ b/BLAKE2s_8h_source.html @@ -161,7 +161,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/BigNumberUtil_8cpp_source.html b/BigNumberUtil_8cpp_source.html index 4b9f92ce..5e7da7bf 100644 --- a/BigNumberUtil_8cpp_source.html +++ b/BigNumberUtil_8cpp_source.html @@ -557,7 +557,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/BigNumberUtil_8h_source.html b/BigNumberUtil_8h_source.html index adbbbbc4..dfd2f18a 100644 --- a/BigNumberUtil_8h_source.html +++ b/BigNumberUtil_8h_source.html @@ -199,7 +199,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Bitmap_8cpp_source.html b/Bitmap_8cpp_source.html index ab7ffe7f..73a7ecbc 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 76cd2d2a..d1926915 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 d0aa31c9..d7e1cb5f 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 4ad01546..724ba89b 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 20cc4246..f689c795 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 2dc62951..614f14a8 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 4bc423a6..d68b90db 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 99545348..5fa2de76 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 9cee324d..37e41687 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 885a9557..05bf32f1 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 045597d7..ce2dc7ca 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 80a12c13..2547e47b 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 74e6eb00..d6c8db93 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 70e8c026..e6e51c89 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 bdacc077..513aa00b 100644 --- a/ChaChaPoly_8cpp_source.html +++ b/ChaChaPoly_8cpp_source.html @@ -262,7 +262,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/ChaChaPoly_8h_source.html b/ChaChaPoly_8h_source.html index 17ba7295..211cda1c 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 a7bb8fe8..2c7203a8 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 b1839bbc..573e6801 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 3529c7f3..c4159459 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 e88e7697..8ad23ed4 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 4d1d34a7..ce26f00c 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 add50732..6a7eca17 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 eb4659ab..a898b7a6 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 fa724c5c..a9b6c2b9 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 7c65d6a8..e9d9247c 100644 --- a/Crypto_8cpp_source.html +++ b/Crypto_8cpp_source.html @@ -138,7 +138,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Crypto_8h_source.html b/Crypto_8h_source.html index 49c37693..66b2b022 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 40680165..b3b9bc25 100644 --- a/Curve25519_8cpp_source.html +++ b/Curve25519_8cpp_source.html @@ -812,7 +812,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Curve25519_8h_source.html b/Curve25519_8h_source.html index 4996a2d4..f2fe2346 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 1f70623d..622f02e6 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 133c185f..00753185 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 58b1f999..88566f9c 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 8bd7e396..d3b98adf 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 1a60bdc9..cb3da432 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 fa4f25fa..87b7aec3 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 df0c1fce..8dc3c697 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 37d2e76b..26eda76e 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 c34aac44..87ccedde 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 e133cef0..16fe07f0 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 21018def..fde2358c 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 5c9c7faf..69588957 100644 --- a/EAX_8cpp_source.html +++ b/EAX_8cpp_source.html @@ -115,269 +115,193 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
25 #include <string.h>
26 
43 EAXCommon::EAXCommon()
-
44  : blockCipher(0)
-
45 {
-
46  state.encPosn = 0;
-
47  state.authPosn = 0;
-
48  state.authMode = 0;
-
49 }
-
50 
-
51 EAXCommon::~EAXCommon()
-
52 {
-
53  clean(state);
-
54 }
-
55 
-
56 size_t EAXCommon::keySize() const
-
57 {
-
58  return blockCipher->keySize();
-
59 }
-
60 
-
61 size_t EAXCommon::ivSize() const
-
62 {
-
63  // Can use any size but 16 is recommended.
-
64  return 16;
-
65 }
-
66 
-
67 size_t EAXCommon::tagSize() const
-
68 {
-
69  // Tags can be up to 16 bytes in length.
-
70  return 16;
-
71 }
-
72 
-
73 bool EAXCommon::setKey(const uint8_t *key, size_t len)
-
74 {
-
75  return blockCipher->setKey(key, len);
-
76 }
-
77 
-
78 bool EAXCommon::setIV(const uint8_t *iv, size_t len)
-
79 {
-
80  // Must have at least 1 byte for the IV.
-
81  if (!len)
-
82  return false;
-
83 
-
84  // Hash the IV to create the initial nonce for CTR mode. Also creates B.
-
85  omacInitFirst(state.counter);
-
86  omacUpdate(state.counter, iv, len);
-
87  omacFinal(state.counter);
-
88 
-
89  // The tag is initially the nonce value. Will be XOR'ed with
-
90  // the hash of the authenticated and encrypted data later.
-
91  memcpy(state.tag, state.counter, 16);
-
92 
-
93  // Start the hashing context for the authenticated data.
-
94  omacInit(state.hash, 1);
-
95  state.encPosn = 16;
-
96  state.authMode = 1;
-
97 
-
98  // The EAX context is ready to go.
-
99  return true;
-
100 }
-
101 
-
102 void EAXCommon::encrypt(uint8_t *output, const uint8_t *input, size_t len)
-
103 {
-
104  if (state.authMode)
-
105  closeAuthData();
-
106  encryptCTR(output, input, len);
-
107  omacUpdate(state.hash, output, len);
-
108 }
-
109 
-
110 void EAXCommon::decrypt(uint8_t *output, const uint8_t *input, size_t len)
-
111 {
-
112  if (state.authMode)
-
113  closeAuthData();
-
114  omacUpdate(state.hash, input, len);
-
115  encryptCTR(output, input, len);
-
116 }
-
117 
-
118 void EAXCommon::addAuthData(const void *data, size_t len)
-
119 {
-
120  if (state.authMode)
-
121  omacUpdate(state.hash, (const uint8_t *)data, len);
-
122 }
-
123 
-
124 void EAXCommon::computeTag(void *tag, size_t len)
-
125 {
-
126  closeTag();
-
127  if (len > 16)
-
128  len = 16;
-
129  memcpy(tag, state.tag, len);
-
130 }
-
131 
-
132 bool EAXCommon::checkTag(const void *tag, size_t len)
-
133 {
-
134  // Can never match if the expected tag length is too long.
-
135  if (len > 16)
-
136  return false;
-
137 
-
138  // Compute the final tag and check it.
-
139  closeTag();
-
140  return secure_compare(state.tag, tag, len);
-
141 }
-
142 
-
143 void EAXCommon::clear()
-
144 {
-
145  clean(state);
-
146 }
-
147 
-
148 // Doubles a 128-bit value in the GF(2^128) field.
-
149 static void gfDouble(uint8_t value[16])
-
150 {
-
151  uint16_t temp = 0;
-
152  for (uint8_t index = 16; index > 0; ) {
-
153  --index;
-
154  temp |= (((uint16_t)(value[index])) << 1);
-
155  value[index] = (uint8_t)temp;
-
156  temp >>= 8;
-
157  }
-
158  value[15] ^= (uint8_t)((-temp) & 0x87);
-
159 }
-
160 
-
166 void EAXCommon::omacInitFirst(uint8_t omac[16])
-
167 {
-
168  // Start the OMAC context for the nonce. We assume that the
-
169  // data that follows will be at least 1 byte in length so that
-
170  // we can encrypt the zeroes now to derive the B value.
-
171  memset(omac, 0, 16);
-
172  blockCipher->encryptBlock(omac, omac);
-
173  state.authPosn = 0;
-
174 
-
175  // Generate the B value from the encrypted block of zeroes.
-
176  // We will need this later when finalising the OMAC hashes.
-
177  memcpy(state.b, omac, 16);
-
178  gfDouble(state.b);
-
179 }
-
180 
-
187 void EAXCommon::omacInit(uint8_t omac[16], uint8_t t)
-
188 {
-
189  memset(omac, 0, 15);
-
190  omac[15] = t;
-
191  state.authPosn = 16;
-
192 }
+
44 {
+
45  state.encPosn = 0;
+
46  state.authMode = 0;
+
47 }
+
48 
+
49 EAXCommon::~EAXCommon()
+
50 {
+
51  clean(state);
+
52 }
+
53 
+
54 size_t EAXCommon::keySize() const
+
55 {
+
56  return omac.blockCipher()->keySize();
+
57 }
+
58 
+
59 size_t EAXCommon::ivSize() const
+
60 {
+
61  // Can use any size but 16 is recommended.
+
62  return 16;
+
63 }
+
64 
+
65 size_t EAXCommon::tagSize() const
+
66 {
+
67  // Tags can be up to 16 bytes in length.
+
68  return 16;
+
69 }
+
70 
+
71 bool EAXCommon::setKey(const uint8_t *key, size_t len)
+
72 {
+
73  return omac.blockCipher()->setKey(key, len);
+
74 }
+
75 
+
76 bool EAXCommon::setIV(const uint8_t *iv, size_t len)
+
77 {
+
78  // Must have at least 1 byte for the IV.
+
79  if (!len)
+
80  return false;
+
81 
+
82  // Hash the IV to create the initial nonce for CTR mode. Also creates B.
+
83  omac.initFirst(state.counter);
+
84  omac.update(state.counter, iv, len);
+
85  omac.finalize(state.counter);
+
86 
+
87  // The tag is initially the nonce value. Will be XOR'ed with
+
88  // the hash of the authenticated and encrypted data later.
+
89  memcpy(state.tag, state.counter, 16);
+
90 
+
91  // Start the hashing context for the authenticated data.
+
92  omac.initNext(state.hash, 1);
+
93  state.encPosn = 16;
+
94  state.authMode = 1;
+
95 
+
96  // The EAX context is ready to go.
+
97  return true;
+
98 }
+
99 
+
100 void EAXCommon::encrypt(uint8_t *output, const uint8_t *input, size_t len)
+
101 {
+
102  if (state.authMode)
+
103  closeAuthData();
+
104  encryptCTR(output, input, len);
+
105  omac.update(state.hash, output, len);
+
106 }
+
107 
+
108 void EAXCommon::decrypt(uint8_t *output, const uint8_t *input, size_t len)
+
109 {
+
110  if (state.authMode)
+
111  closeAuthData();
+
112  omac.update(state.hash, input, len);
+
113  encryptCTR(output, input, len);
+
114 }
+
115 
+
116 void EAXCommon::addAuthData(const void *data, size_t len)
+
117 {
+
118  if (state.authMode)
+
119  omac.update(state.hash, (const uint8_t *)data, len);
+
120 }
+
121 
+
122 void EAXCommon::computeTag(void *tag, size_t len)
+
123 {
+
124  closeTag();
+
125  if (len > 16)
+
126  len = 16;
+
127  memcpy(tag, state.tag, len);
+
128 }
+
129 
+
130 bool EAXCommon::checkTag(const void *tag, size_t len)
+
131 {
+
132  // Can never match if the expected tag length is too long.
+
133  if (len > 16)
+
134  return false;
+
135 
+
136  // Compute the final tag and check it.
+
137  closeTag();
+
138  return secure_compare(state.tag, tag, len);
+
139 }
+
140 
+
141 void EAXCommon::clear()
+
142 {
+
143  clean(state);
+
144 }
+
145 
+
150 void EAXCommon::closeAuthData()
+
151 {
+
152  // Finalise the OMAC hash and XOR it with the final tag.
+
153  omac.finalize(state.hash);
+
154  for (uint8_t index = 0; index < 16; ++index)
+
155  state.tag[index] ^= state.hash[index];
+
156  state.authMode = 0;
+
157 
+
158  // Initialise the hashing context for the ciphertext data.
+
159  omac.initNext(state.hash, 2);
+
160 }
+
161 
+
171 void EAXCommon::encryptCTR(uint8_t *output, const uint8_t *input, size_t len)
+
172 {
+
173  while (len > 0) {
+
174  // Do we need to start a new block?
+
175  if (state.encPosn == 16) {
+
176  // Encrypt the counter to create the next keystream block.
+
177  omac.blockCipher()->encryptBlock(state.stream, state.counter);
+
178  state.encPosn = 0;
+
179 
+
180  // Increment the counter, taking care not to reveal
+
181  // any timing information about the starting value.
+
182  // We iterate through the entire counter region even
+
183  // if we could stop earlier because a byte is non-zero.
+
184  uint16_t temp = 1;
+
185  uint8_t index = 16;
+
186  while (index > 0) {
+
187  --index;
+
188  temp += state.counter[index];
+
189  state.counter[index] = (uint8_t)temp;
+
190  temp >>= 8;
+
191  }
+
192  }
193 
-
201 void EAXCommon::omacUpdate(uint8_t omac[16], const uint8_t *data, size_t len)
-
202 {
-
203  while (len > 0) {
-
204  // Encrypt the current block if it is already full.
-
205  if (state.authPosn == 16) {
-
206  blockCipher->encryptBlock(omac, omac);
-
207  state.authPosn = 0;
-
208  }
-
209 
-
210  // XOR the incoming data with the current block.
-
211  uint8_t size = 16 - state.authPosn;
-
212  if (size > len)
-
213  size = (uint8_t)len;
-
214  for (uint8_t index = 0; index < size; ++index)
-
215  omac[(state.authPosn)++] ^= data[index];
-
216 
-
217  // Move onto the next block.
-
218  len -= size;
-
219  data += size;
-
220  }
-
221 }
-
222 
-
228 void EAXCommon::omacFinal(uint8_t omac[16])
-
229 {
-
230  // Apply padding if necessary.
-
231  if (state.authPosn != 16) {
-
232  // Need padding: XOR with P = 2 * B.
-
233  uint8_t p[16];
-
234  memcpy(p, state.b, 16);
-
235  gfDouble(p);
-
236  omac[state.authPosn] ^= 0x80;
-
237  for (uint8_t index = 0; index < 16; ++index)
-
238  omac[index] ^= p[index];
-
239  clean(p);
-
240  } else {
-
241  // No padding necessary: XOR with B.
-
242  for (uint8_t index = 0; index < 16; ++index)
-
243  omac[index] ^= state.b[index];
-
244  }
-
245 
-
246  // Encrypt the hash to get the final OMAC value.
-
247  blockCipher->encryptBlock(omac, omac);
-
248 }
-
249 
-
254 void EAXCommon::closeAuthData()
-
255 {
-
256  // Finalise the OMAC hash and XOR it with the final tag.
-
257  omacFinal(state.hash);
-
258  for (uint8_t index = 0; index < 16; ++index)
-
259  state.tag[index] ^= state.hash[index];
-
260  state.authMode = 0;
-
261 
-
262  // Initialise the hashing context for the ciphertext data.
-
263  omacInit(state.hash, 2);
-
264 }
-
265 
-
275 void EAXCommon::encryptCTR(uint8_t *output, const uint8_t *input, size_t len)
-
276 {
-
277  while (len > 0) {
-
278  // Do we need to start a new block?
-
279  if (state.encPosn == 16) {
-
280  // Encrypt the counter to create the next keystream block.
-
281  blockCipher->encryptBlock(state.stream, state.counter);
-
282  state.encPosn = 0;
-
283 
-
284  // Increment the counter, taking care not to reveal
-
285  // any timing information about the starting value.
-
286  // We iterate through the entire counter region even
-
287  // if we could stop earlier because a byte is non-zero.
-
288  uint16_t temp = 1;
-
289  uint8_t index = 16;
-
290  while (index > 0) {
-
291  --index;
-
292  temp += state.counter[index];
-
293  state.counter[index] = (uint8_t)temp;
-
294  temp >>= 8;
-
295  }
-
296  }
-
297 
-
298  // Encrypt/decrypt the current input block.
-
299  uint8_t size = 16 - state.encPosn;
-
300  if (size > len)
-
301  size = (uint8_t)len;
-
302  for (uint8_t index = 0; index < size; ++index)
-
303  output[index] = input[index] ^ state.stream[(state.encPosn)++];
-
304 
-
305  // Move onto the next block.
-
306  len -= size;
-
307  input += size;
-
308  output += size;
-
309  }
-
310 }
-
311 
-
312 void EAXCommon::closeTag()
-
313 {
-
314  // If we were only authenticating, then close off auth mode.
-
315  if (state.authMode)
-
316  closeAuthData();
-
317 
-
318  // Finalise the hash over the ciphertext and XOR with the final tag.
-
319  omacFinal(state.hash);
-
320  for (uint8_t index = 0; index < 16; ++index)
-
321  state.tag[index] ^= state.hash[index];
-
322 }
-
323 
-
bool setIV(const uint8_t *iv, size_t len)
Sets the initialization vector to use for future encryption and decryption operations.
Definition: EAX.cpp:78
-
void decrypt(uint8_t *output, const uint8_t *input, size_t len)
Decrypts an input buffer and writes the plaintext to an output buffer.
Definition: EAX.cpp:110
-
size_t tagSize() const
Returns the size of the authentication tag.
Definition: EAX.cpp:67
+
194  // Encrypt/decrypt the current input block.
+
195  uint8_t size = 16 - state.encPosn;
+
196  if (size > len)
+
197  size = (uint8_t)len;
+
198  for (uint8_t index = 0; index < size; ++index)
+
199  output[index] = input[index] ^ state.stream[(state.encPosn)++];
+
200 
+
201  // Move onto the next block.
+
202  len -= size;
+
203  input += size;
+
204  output += size;
+
205  }
+
206 }
+
207 
+
208 void EAXCommon::closeTag()
+
209 {
+
210  // If we were only authenticating, then close off auth mode.
+
211  if (state.authMode)
+
212  closeAuthData();
+
213 
+
214  // Finalise the hash over the ciphertext and XOR with the final tag.
+
215  omac.finalize(state.hash);
+
216  for (uint8_t index = 0; index < 16; ++index)
+
217  state.tag[index] ^= state.hash[index];
+
218 }
+
219 
+
void finalize(uint8_t omac[16])
Finalises an OMAC hashing context.
Definition: OMAC.cpp:172
+
bool setIV(const uint8_t *iv, size_t len)
Sets the initialization vector to use for future encryption and decryption operations.
Definition: EAX.cpp:76
+
void decrypt(uint8_t *output, const uint8_t *input, size_t len)
Decrypts an input buffer and writes the plaintext to an output buffer.
Definition: EAX.cpp:108
+
size_t tagSize() const
Returns the size of the authentication tag.
Definition: EAX.cpp:65
EAXCommon()
Constructs a new cipher in EAX mode.
Definition: EAX.cpp:43
-
bool checkTag(const void *tag, size_t len)
Finalizes the decryption process and checks the authentication tag.
Definition: EAX.cpp:132
+
bool checkTag(const void *tag, size_t len)
Finalizes the decryption process and checks the authentication tag.
Definition: EAX.cpp:130
virtual void encryptBlock(uint8_t *output, const uint8_t *input)=0
Encrypts a single block using this cipher.
-
void encrypt(uint8_t *output, const uint8_t *input, size_t len)
Encrypts an input buffer and writes the ciphertext to an output buffer.
Definition: EAX.cpp:102
-
void clear()
Clears all security-sensitive state from this cipher.
Definition: EAX.cpp:143
-
bool setKey(const uint8_t *key, size_t len)
Sets the key to use for future encryption and decryption operations.
Definition: EAX.cpp:73
-
void computeTag(void *tag, size_t len)
Finalizes the encryption process and computes the authentication tag.
Definition: EAX.cpp:124
+
void initNext(uint8_t omac[16], uint8_t tag)
Initialises or restarts an OMAC hashing context.
Definition: OMAC.cpp:127
+
void update(uint8_t omac[16], const uint8_t *data, size_t size)
Updates an OMAC hashing context with more data.
Definition: OMAC.cpp:143
+
void encrypt(uint8_t *output, const uint8_t *input, size_t len)
Encrypts an input buffer and writes the ciphertext to an output buffer.
Definition: EAX.cpp:100
+
void clear()
Clears all security-sensitive state from this cipher.
Definition: EAX.cpp:141
+
bool setKey(const uint8_t *key, size_t len)
Sets the key to use for future encryption and decryption operations.
Definition: EAX.cpp:71
+
void computeTag(void *tag, size_t len)
Finalizes the encryption process and computes the authentication tag.
Definition: EAX.cpp:122
virtual bool setKey(const uint8_t *key, size_t len)=0
Sets the key to use for future encryption and decryption operations.
-
size_t ivSize() const
Size of the initialization vector for this cipher, in bytes.
Definition: EAX.cpp:61
-
void addAuthData(const void *data, size_t len)
Adds extra data that will be authenticated but not encrypted.
Definition: EAX.cpp:118
-
size_t keySize() const
Default size of the key for this cipher, in bytes.
Definition: EAX.cpp:56
+
size_t ivSize() const
Size of the initialization vector for this cipher, in bytes.
Definition: EAX.cpp:59
+
void addAuthData(const void *data, size_t len)
Adds extra data that will be authenticated but not encrypted.
Definition: EAX.cpp:116
+
size_t keySize() const
Default size of the key for this cipher, in bytes.
Definition: EAX.cpp:54
+
BlockCipher * blockCipher() const
Gets the block cipher that is in use for this OMAC object.
Definition: OMAC.h:34
virtual size_t keySize() const =0
Default size of the key for this block cipher, in bytes.
+
void initFirst(uint8_t omac[16])
Initialises the first OMAC hashing context and creates the B value.
Definition: OMAC.cpp:101
diff --git a/EAX_8h_source.html b/EAX_8h_source.html index 9f2e8d73..ee84af62 100644 --- a/EAX_8h_source.html +++ b/EAX_8h_source.html @@ -115,89 +115,88 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
25 
26 #include "AuthenticatedCipher.h"
27 #include "BlockCipher.h"
-
28 
-
29 class EAXCommon : public AuthenticatedCipher
-
30 {
-
31 public:
-
32  virtual ~EAXCommon();
-
33 
-
34  size_t keySize() const;
-
35  size_t ivSize() const;
-
36  size_t tagSize() const;
-
37 
-
38  bool setKey(const uint8_t *key, size_t len);
-
39  bool setIV(const uint8_t *iv, size_t len);
-
40 
-
41  void encrypt(uint8_t *output, const uint8_t *input, size_t len);
-
42  void decrypt(uint8_t *output, const uint8_t *input, size_t len);
-
43 
-
44  void addAuthData(const void *data, size_t len);
-
45 
-
46  void computeTag(void *tag, size_t len);
-
47  bool checkTag(const void *tag, size_t len);
-
48 
-
49  void clear();
-
50 
-
51 protected:
-
52  EAXCommon();
-
53  void setBlockCipher(BlockCipher *cipher) { blockCipher = cipher; }
-
54 
-
55 private:
-
56  BlockCipher *blockCipher;
-
57  struct {
-
58  uint8_t counter[16];
-
59  uint8_t stream[16];
-
60  uint8_t tag[16];
-
61  uint8_t hash[16];
-
62  uint8_t b[16];
-
63  uint8_t encPosn;
-
64  uint8_t authPosn;
-
65  uint8_t authMode;
-
66  } state;
-
67 
-
68  void omacInitFirst(uint8_t omac[16]);
-
69  void omacInit(uint8_t omac[16], uint8_t t);
-
70  void omacUpdate(uint8_t omac[16], const uint8_t *data, size_t len);
-
71  void omacFinal(uint8_t omac[16]);
-
72 
-
73  void closeAuthData();
-
74  void encryptCTR(uint8_t *output, const uint8_t *input, size_t len);
-
75  void closeTag();
-
76 };
-
77 
-
78 template <typename T>
-
79 class EAX : public EAXCommon
-
80 {
-
81 public:
-
82  EAX() { setBlockCipher(&cipher); }
-
83 
-
84 private:
-
85  T cipher;
-
86 };
-
87 
-
88 #endif
-
bool setIV(const uint8_t *iv, size_t len)
Sets the initialization vector to use for future encryption and decryption operations.
Definition: EAX.cpp:78
+
28 #include "OMAC.h"
+
29 
+
30 class EAXCommon : public AuthenticatedCipher
+
31 {
+
32 public:
+
33  virtual ~EAXCommon();
+
34 
+
35  size_t keySize() const;
+
36  size_t ivSize() const;
+
37  size_t tagSize() const;
+
38 
+
39  bool setKey(const uint8_t *key, size_t len);
+
40  bool setIV(const uint8_t *iv, size_t len);
+
41 
+
42  void encrypt(uint8_t *output, const uint8_t *input, size_t len);
+
43  void decrypt(uint8_t *output, const uint8_t *input, size_t len);
+
44 
+
45  void addAuthData(const void *data, size_t len);
+
46 
+
47  void computeTag(void *tag, size_t len);
+
48  bool checkTag(const void *tag, size_t len);
+
49 
+
50  void clear();
+
51 
+
52 protected:
+
53  EAXCommon();
+
54  void setBlockCipher(BlockCipher *cipher)
+
55  {
+
56  omac.setBlockCipher(cipher);
+
57  }
+
58 
+
59 private:
+
60  struct {
+
61  uint8_t counter[16];
+
62  uint8_t stream[16];
+
63  uint8_t tag[16];
+
64  uint8_t hash[16];
+
65  uint8_t encPosn;
+
66  uint8_t authMode;
+
67  } state;
+
68  OMAC omac;
+
69 
+
70  void closeAuthData();
+
71  void encryptCTR(uint8_t *output, const uint8_t *input, size_t len);
+
72  void closeTag();
+
73 };
+
74 
+
75 template <typename T>
+
76 class EAX : public EAXCommon
+
77 {
+
78 public:
+
79  EAX() { setBlockCipher(&cipher); }
+
80 
+
81 private:
+
82  T cipher;
+
83 };
+
84 
+
85 #endif
+
Implementation of the OMAC message authenticator.
Definition: OMAC.h:28
+
bool setIV(const uint8_t *iv, size_t len)
Sets the initialization vector to use for future encryption and decryption operations.
Definition: EAX.cpp:76
Abstract base class for block ciphers.
Definition: BlockCipher.h:29
-
void decrypt(uint8_t *output, const uint8_t *input, size_t len)
Decrypts an input buffer and writes the plaintext to an output buffer.
Definition: EAX.cpp:110
+
void decrypt(uint8_t *output, const uint8_t *input, size_t len)
Decrypts an input buffer and writes the plaintext to an output buffer.
Definition: EAX.cpp:108
Abstract base class for authenticated ciphers.
-
size_t tagSize() const
Returns the size of the authentication tag.
Definition: EAX.cpp:67
+
size_t tagSize() const
Returns the size of the authentication tag.
Definition: EAX.cpp:65
EAXCommon()
Constructs a new cipher in EAX mode.
Definition: EAX.cpp:43
-
bool checkTag(const void *tag, size_t len)
Finalizes the decryption process and checks the authentication tag.
Definition: EAX.cpp:132
-
Concrete base class to assist with implementing EAX for 128-bit block ciphers.
Definition: EAX.h:29
-
EAX()
Constructs a new EAX object for the block cipher T.
Definition: EAX.h:82
-
void encrypt(uint8_t *output, const uint8_t *input, size_t len)
Encrypts an input buffer and writes the ciphertext to an output buffer.
Definition: EAX.cpp:102
-
void clear()
Clears all security-sensitive state from this cipher.
Definition: EAX.cpp:143
-
bool setKey(const uint8_t *key, size_t len)
Sets the key to use for future encryption and decryption operations.
Definition: EAX.cpp:73
-
void computeTag(void *tag, size_t len)
Finalizes the encryption process and computes the authentication tag.
Definition: EAX.cpp:124
-
Implementation of the EAX authenticated cipher.
Definition: EAX.h:79
-
void setBlockCipher(BlockCipher *cipher)
Sets the block cipher to use for this EAX object.
Definition: EAX.h:53
-
size_t ivSize() const
Size of the initialization vector for this cipher, in bytes.
Definition: EAX.cpp:61
-
void addAuthData(const void *data, size_t len)
Adds extra data that will be authenticated but not encrypted.
Definition: EAX.cpp:118
-
size_t keySize() const
Default size of the key for this cipher, in bytes.
Definition: EAX.cpp:56
+
void setBlockCipher(BlockCipher *cipher)
Sets the block cipher to use for this OMAC object.
Definition: OMAC.h:35
+
bool checkTag(const void *tag, size_t len)
Finalizes the decryption process and checks the authentication tag.
Definition: EAX.cpp:130
+
Concrete base class to assist with implementing EAX for 128-bit block ciphers.
Definition: EAX.h:30
+
EAX()
Constructs a new EAX object for the block cipher T.
Definition: EAX.h:79
+
void encrypt(uint8_t *output, const uint8_t *input, size_t len)
Encrypts an input buffer and writes the ciphertext to an output buffer.
Definition: EAX.cpp:100
+
void clear()
Clears all security-sensitive state from this cipher.
Definition: EAX.cpp:141
+
bool setKey(const uint8_t *key, size_t len)
Sets the key to use for future encryption and decryption operations.
Definition: EAX.cpp:71
+
void computeTag(void *tag, size_t len)
Finalizes the encryption process and computes the authentication tag.
Definition: EAX.cpp:122
+
Implementation of the EAX authenticated cipher.
Definition: EAX.h:76
+
void setBlockCipher(BlockCipher *cipher)
Sets the block cipher to use for this EAX object.
Definition: EAX.h:54
+
size_t ivSize() const
Size of the initialization vector for this cipher, in bytes.
Definition: EAX.cpp:59
+
void addAuthData(const void *data, size_t len)
Adds extra data that will be authenticated but not encrypted.
Definition: EAX.cpp:116
+
size_t keySize() const
Default size of the key for this cipher, in bytes.
Definition: EAX.cpp:54
diff --git a/EEPROM24_8cpp_source.html b/EEPROM24_8cpp_source.html index 26e2b9a8..775f3857 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 ed752b8e..9325ecf7 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 56a7868d..02b771d4 100644 --- a/Ed25519_8cpp_source.html +++ b/Ed25519_8cpp_source.html @@ -572,7 +572,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Ed25519_8h_source.html b/Ed25519_8h_source.html index c9781fd4..eb8a0937 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 62d4693c..1ffb0f5e 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 3f05b1fc..51a95b6b 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 bec44771..3e2d577b 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 3bac4385..051cef36 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 43ab987e..0f93df08 100644 --- a/GCM_8cpp_source.html +++ b/GCM_8cpp_source.html @@ -334,16 +334,16 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
void clear()
Clears all security-sensitive state from this cipher.
Definition: GCM.cpp:256
bool checkTag(const void *tag, size_t len)
Finalizes the decryption process and checks the authentication tag.
Definition: GCM.cpp:245
size_t ivSize() const
Size of the initialization vector for this cipher, in bytes.
Definition: GCM.cpp:66
-
void finalize(void *token, size_t len)
Finalizes the authentication process and returns the token.
Definition: GHASH.cpp:130
+
void finalize(void *token, size_t len)
Finalizes the authentication process and returns the token.
Definition: GHASH.cpp:121
void addAuthData(const void *data, size_t len)
Adds extra data that will be authenticated but not encrypted.
Definition: GCM.cpp:217
-
void update(const void *data, size_t len)
Updates the message authenticator with more data.
Definition: GHASH.cpp:94
+
void update(const void *data, size_t len)
Updates the message authenticator with more data.
Definition: GHASH.cpp:85
virtual void encryptBlock(uint8_t *output, const uint8_t *input)=0
Encrypts a single block using this cipher.
void decrypt(uint8_t *output, const uint8_t *input, size_t len)
Decrypts an input buffer and writes the plaintext to an output buffer.
Definition: GCM.cpp:182
virtual bool setKey(const uint8_t *key, size_t len)=0
Sets the key to use for future encryption and decryption operations.
GCMCommon()
Constructs a new cipher in GCM mode.
Definition: GCM.cpp:44
-
void pad()
Pads the input stream with zero bytes to a multiple of 16.
Definition: GHASH.cpp:146
+
void pad()
Pads the input stream with zero bytes to a multiple of 16.
Definition: GHASH.cpp:137
virtual void clear()=0
Clears all security-sensitive state from this block cipher.
-
void clear()
Clears the authenticator's state, removing all sensitive data.
Definition: GHASH.cpp:159
+
void clear()
Clears the authenticator's state, removing all sensitive data.
Definition: GHASH.cpp:150
virtual ~GCMCommon()
Destroys this cipher object after clearing sensitive information.
Definition: GCM.cpp:56
bool setIV(const uint8_t *iv, size_t len)
Sets the initialization vector to use for future encryption and decryption operations.
Definition: GCM.cpp:90
virtual size_t keySize() const =0
Default size of the key for this block cipher, in bytes.
@@ -352,7 +352,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/GCM_8h_source.html b/GCM_8h_source.html index 3a5ab22c..b03512cd 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 new file mode 100644 index 00000000..759c169b --- /dev/null +++ b/GF128_8cpp_source.html @@ -0,0 +1,509 @@ + + + + + + +ArduinoLibs: GF128.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
ArduinoLibs +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
GF128.cpp
+
+
+
1 /*
+
2  * Copyright (C) 2016 Southern Storm Software, Pty Ltd.
+
3  *
+
4  * Permission is hereby granted, free of charge, to any person obtaining a
+
5  * copy of this software and associated documentation files (the "Software"),
+
6  * to deal in the Software without restriction, including without limitation
+
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+
8  * and/or sell copies of the Software, and to permit persons to whom the
+
9  * Software is furnished to do so, subject to the following conditions:
+
10  *
+
11  * The above copyright notice and this permission notice shall be included
+
12  * in all copies or substantial portions of the Software.
+
13  *
+
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+
15  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+
19  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+
20  * DEALINGS IN THE SOFTWARE.
+
21  */
+
22 
+
23 #include "GF128.h"
+
24 #include "utility/EndianUtil.h"
+
25 #include <string.h>
+
26 
+
58 void GF128::mulInit(uint32_t H[4], const void *key)
+
59 {
+
60 #if defined(__AVR__)
+
61  // Copy the key into H but leave it in big endian order because
+
62  // we can correct for the byte order in mul() below.
+
63  memcpy(H, key, 16);
+
64 #else
+
65  // Copy the key into H and convert from big endian to host order.
+
66  memcpy(H, key, 16);
+
67 #if defined(CRYPTO_LITTLE_ENDIAN)
+
68  H[0] = be32toh(H[0]);
+
69  H[1] = be32toh(H[1]);
+
70  H[2] = be32toh(H[2]);
+
71  H[3] = be32toh(H[3]);
+
72 #endif
+
73 #endif
+
74 }
+
75 
+
90 void GF128::mul(uint32_t Y[4], const uint32_t H[4])
+
91 {
+
92 #if defined(__AVR__)
+
93  uint32_t Z[4] = {0, 0, 0, 0}; // Z = 0
+
94  uint32_t V0 = H[0]; // V = H
+
95  uint32_t V1 = H[1];
+
96  uint32_t V2 = H[2];
+
97  uint32_t V3 = H[3];
+
98 
+
99  // Multiply Z by V for the set bits in Y, starting at the top.
+
100  // This is a very simple bit by bit version that may not be very
+
101  // fast but it should be resistant to cache timing attacks.
+
102  for (uint8_t posn = 0; posn < 16; ++posn) {
+
103  uint8_t value = ((const uint8_t *)Y)[posn];
+
104  for (uint8_t bit = 0; bit < 8; ++bit) {
+
105  __asm__ __volatile__ (
+
106  // Extract the high bit of "value" and turn it into a mask.
+
107  "ldd r24,%8\n"
+
108  "lsl r24\n"
+
109  "std %8,r24\n"
+
110  "mov __tmp_reg__,__zero_reg__\n"
+
111  "sbc __tmp_reg__,__zero_reg__\n"
+
112 
+
113  // XOR V with Z if the bit is 1.
+
114  "mov r24,%D0\n" // Z0 ^= (V0 & mask)
+
115  "and r24,__tmp_reg__\n"
+
116  "ldd r25,%D4\n"
+
117  "eor r25,r24\n"
+
118  "std %D4,r25\n"
+
119  "mov r24,%C0\n"
+
120  "and r24,__tmp_reg__\n"
+
121  "ldd r25,%C4\n"
+
122  "eor r25,r24\n"
+
123  "std %C4,r25\n"
+
124  "mov r24,%B0\n"
+
125  "and r24,__tmp_reg__\n"
+
126  "ldd r25,%B4\n"
+
127  "eor r25,r24\n"
+
128  "std %B4,r25\n"
+
129  "mov r24,%A0\n"
+
130  "and r24,__tmp_reg__\n"
+
131  "ldd r25,%A4\n"
+
132  "eor r25,r24\n"
+
133  "std %A4,r25\n"
+
134  "mov r24,%D1\n" // Z1 ^= (V1 & mask)
+
135  "and r24,__tmp_reg__\n"
+
136  "ldd r25,%D5\n"
+
137  "eor r25,r24\n"
+
138  "std %D5,r25\n"
+
139  "mov r24,%C1\n"
+
140  "and r24,__tmp_reg__\n"
+
141  "ldd r25,%C5\n"
+
142  "eor r25,r24\n"
+
143  "std %C5,r25\n"
+
144  "mov r24,%B1\n"
+
145  "and r24,__tmp_reg__\n"
+
146  "ldd r25,%B5\n"
+
147  "eor r25,r24\n"
+
148  "std %B5,r25\n"
+
149  "mov r24,%A1\n"
+
150  "and r24,__tmp_reg__\n"
+
151  "ldd r25,%A5\n"
+
152  "eor r25,r24\n"
+
153  "std %A5,r25\n"
+
154  "mov r24,%D2\n" // Z2 ^= (V2 & mask)
+
155  "and r24,__tmp_reg__\n"
+
156  "ldd r25,%D6\n"
+
157  "eor r25,r24\n"
+
158  "std %D6,r25\n"
+
159  "mov r24,%C2\n"
+
160  "and r24,__tmp_reg__\n"
+
161  "ldd r25,%C6\n"
+
162  "eor r25,r24\n"
+
163  "std %C6,r25\n"
+
164  "mov r24,%B2\n"
+
165  "and r24,__tmp_reg__\n"
+
166  "ldd r25,%B6\n"
+
167  "eor r25,r24\n"
+
168  "std %B6,r25\n"
+
169  "mov r24,%A2\n"
+
170  "and r24,__tmp_reg__\n"
+
171  "ldd r25,%A6\n"
+
172  "eor r25,r24\n"
+
173  "std %A6,r25\n"
+
174  "mov r24,%D3\n" // Z3 ^= (V3 & mask)
+
175  "and r24,__tmp_reg__\n"
+
176  "ldd r25,%D7\n"
+
177  "eor r25,r24\n"
+
178  "std %D7,r25\n"
+
179  "mov r24,%C3\n"
+
180  "and r24,__tmp_reg__\n"
+
181  "ldd r25,%C7\n"
+
182  "eor r25,r24\n"
+
183  "std %C7,r25\n"
+
184  "mov r24,%B3\n"
+
185  "and r24,__tmp_reg__\n"
+
186  "ldd r25,%B7\n"
+
187  "eor r25,r24\n"
+
188  "std %B7,r25\n"
+
189  "mov r24,%A3\n"
+
190  "and r24,__tmp_reg__\n"
+
191  "ldd r25,%A7\n"
+
192  "eor r25,r24\n"
+
193  "std %A7,r25\n"
+
194 
+
195  // Rotate V right by 1 bit.
+
196  "lsr %A0\n"
+
197  "ror %B0\n"
+
198  "ror %C0\n"
+
199  "ror %D0\n"
+
200  "ror %A1\n"
+
201  "ror %B1\n"
+
202  "ror %C1\n"
+
203  "ror %D1\n"
+
204  "ror %A2\n"
+
205  "ror %B2\n"
+
206  "ror %C2\n"
+
207  "ror %D2\n"
+
208  "ror %A3\n"
+
209  "ror %B3\n"
+
210  "ror %C3\n"
+
211  "ror %D3\n"
+
212  "mov r24,__zero_reg__\n"
+
213  "sbc r24,__zero_reg__\n"
+
214  "andi r24,0xE1\n"
+
215  "eor %A0,r24\n"
+
216  : "+r"(V0), "+r"(V1), "+r"(V2), "+r"(V3)
+
217  : "Q"(Z[0]), "Q"(Z[1]), "Q"(Z[2]), "Q"(Z[3]), "Q"(value)
+
218  : "r24", "r25"
+
219  );
+
220  }
+
221  }
+
222 
+
223  // We have finished the block so copy Z into Y and byte-swap.
+
224  __asm__ __volatile__ (
+
225  "ldd __tmp_reg__,%A0\n"
+
226  "st X+,__tmp_reg__\n"
+
227  "ldd __tmp_reg__,%B0\n"
+
228  "st X+,__tmp_reg__\n"
+
229  "ldd __tmp_reg__,%C0\n"
+
230  "st X+,__tmp_reg__\n"
+
231  "ldd __tmp_reg__,%D0\n"
+
232  "st X+,__tmp_reg__\n"
+
233  "ldd __tmp_reg__,%A1\n"
+
234  "st X+,__tmp_reg__\n"
+
235  "ldd __tmp_reg__,%B1\n"
+
236  "st X+,__tmp_reg__\n"
+
237  "ldd __tmp_reg__,%C1\n"
+
238  "st X+,__tmp_reg__\n"
+
239  "ldd __tmp_reg__,%D1\n"
+
240  "st X+,__tmp_reg__\n"
+
241  "ldd __tmp_reg__,%A2\n"
+
242  "st X+,__tmp_reg__\n"
+
243  "ldd __tmp_reg__,%B2\n"
+
244  "st X+,__tmp_reg__\n"
+
245  "ldd __tmp_reg__,%C2\n"
+
246  "st X+,__tmp_reg__\n"
+
247  "ldd __tmp_reg__,%D2\n"
+
248  "st X+,__tmp_reg__\n"
+
249  "ldd __tmp_reg__,%A3\n"
+
250  "st X+,__tmp_reg__\n"
+
251  "ldd __tmp_reg__,%B3\n"
+
252  "st X+,__tmp_reg__\n"
+
253  "ldd __tmp_reg__,%C3\n"
+
254  "st X+,__tmp_reg__\n"
+
255  "ldd __tmp_reg__,%D3\n"
+
256  "st X,__tmp_reg__\n"
+
257  : : "Q"(Z[0]), "Q"(Z[1]), "Q"(Z[2]), "Q"(Z[3]), "x"(Y)
+
258  );
+
259 #else // !__AVR__
+
260  uint32_t Z0 = 0; // Z = 0
+
261  uint32_t Z1 = 0;
+
262  uint32_t Z2 = 0;
+
263  uint32_t Z3 = 0;
+
264  uint32_t V0 = H[0]; // V = H
+
265  uint32_t V1 = H[1];
+
266  uint32_t V2 = H[2];
+
267  uint32_t V3 = H[3];
+
268 
+
269  // Multiply Z by V for the set bits in Y, starting at the top.
+
270  // This is a very simple bit by bit version that may not be very
+
271  // fast but it should be resistant to cache timing attacks.
+
272  for (uint8_t posn = 0; posn < 16; ++posn) {
+
273  uint8_t value = ((const uint8_t *)Y)[posn];
+
274  for (uint8_t bit = 0; bit < 8; ++bit, value <<= 1) {
+
275  // Extract the high bit of "value" and turn it into a mask.
+
276  uint32_t mask = (~((uint32_t)(value >> 7))) + 1;
+
277 
+
278  // XOR V with Z if the bit is 1.
+
279  Z0 ^= (V0 & mask);
+
280  Z1 ^= (V1 & mask);
+
281  Z2 ^= (V2 & mask);
+
282  Z3 ^= (V3 & mask);
+
283 
+
284  // Rotate V right by 1 bit.
+
285  mask = ((~(V3 & 0x01)) + 1) & 0xE1000000;
+
286  V3 = (V3 >> 1) | (V2 << 31);
+
287  V2 = (V2 >> 1) | (V1 << 31);
+
288  V1 = (V1 >> 1) | (V0 << 31);
+
289  V0 = (V0 >> 1) ^ mask;
+
290  }
+
291  }
+
292 
+
293  // We have finished the block so copy Z into Y and byte-swap.
+
294  Y[0] = htobe32(Z0);
+
295  Y[1] = htobe32(Z1);
+
296  Y[2] = htobe32(Z2);
+
297  Y[3] = htobe32(Z3);
+
298 #endif // !__AVR__
+
299 }
+
300 
+
314 void GF128::dbl(uint32_t V[4])
+
315 {
+
316 #if defined(__AVR__)
+
317  __asm__ __volatile__ (
+
318  "ld r16,Z\n"
+
319  "ldd r17,Z+1\n"
+
320  "ldd r18,Z+2\n"
+
321  "ldd r19,Z+3\n"
+
322  "lsr r16\n"
+
323  "ror r17\n"
+
324  "ror r18\n"
+
325  "ror r19\n"
+
326  "std Z+1,r17\n"
+
327  "std Z+2,r18\n"
+
328  "std Z+3,r19\n"
+
329  "ldd r17,Z+4\n"
+
330  "ldd r18,Z+5\n"
+
331  "ldd r19,Z+6\n"
+
332  "ldd r20,Z+7\n"
+
333  "ror r17\n"
+
334  "ror r18\n"
+
335  "ror r19\n"
+
336  "ror r20\n"
+
337  "std Z+4,r17\n"
+
338  "std Z+5,r18\n"
+
339  "std Z+6,r19\n"
+
340  "std Z+7,r20\n"
+
341  "ldd r17,Z+8\n"
+
342  "ldd r18,Z+9\n"
+
343  "ldd r19,Z+10\n"
+
344  "ldd r20,Z+11\n"
+
345  "ror r17\n"
+
346  "ror r18\n"
+
347  "ror r19\n"
+
348  "ror r20\n"
+
349  "std Z+8,r17\n"
+
350  "std Z+9,r18\n"
+
351  "std Z+10,r19\n"
+
352  "std Z+11,r20\n"
+
353  "ldd r17,Z+12\n"
+
354  "ldd r18,Z+13\n"
+
355  "ldd r19,Z+14\n"
+
356  "ldd r20,Z+15\n"
+
357  "ror r17\n"
+
358  "ror r18\n"
+
359  "ror r19\n"
+
360  "ror r20\n"
+
361  "std Z+12,r17\n"
+
362  "std Z+13,r18\n"
+
363  "std Z+14,r19\n"
+
364  "std Z+15,r20\n"
+
365  "mov r17,__zero_reg__\n"
+
366  "sbc r17,__zero_reg__\n"
+
367  "andi r17,0xE1\n"
+
368  "eor r16,r17\n"
+
369  "st Z,r16\n"
+
370  : : "z"(V)
+
371  : "r16", "r17", "r18", "r19", "r20"
+
372  );
+
373 #else
+
374  uint32_t V0 = be32toh(V[0]);
+
375  uint32_t V1 = be32toh(V[1]);
+
376  uint32_t V2 = be32toh(V[2]);
+
377  uint32_t V3 = be32toh(V[3]);
+
378  uint32_t mask = ((~(V3 & 0x01)) + 1) & 0xE1000000;
+
379  V3 = (V3 >> 1) | (V2 << 31);
+
380  V2 = (V2 >> 1) | (V1 << 31);
+
381  V1 = (V1 >> 1) | (V0 << 31);
+
382  V0 = (V0 >> 1) ^ mask;
+
383  V[0] = htobe32(V0);
+
384  V[1] = htobe32(V1);
+
385  V[2] = htobe32(V2);
+
386  V[3] = htobe32(V3);
+
387 #endif
+
388 }
+
389 
+
406 void GF128::dblEAX(uint32_t V[4])
+
407 {
+
408 #if defined(__AVR__)
+
409  __asm__ __volatile__ (
+
410  "ldd r16,Z+15\n"
+
411  "ldd r17,Z+14\n"
+
412  "ldd r18,Z+13\n"
+
413  "ldd r19,Z+12\n"
+
414  "lsl r16\n"
+
415  "rol r17\n"
+
416  "rol r18\n"
+
417  "rol r19\n"
+
418  "std Z+14,r17\n"
+
419  "std Z+13,r18\n"
+
420  "std Z+12,r19\n"
+
421  "ldd r17,Z+11\n"
+
422  "ldd r18,Z+10\n"
+
423  "ldd r19,Z+9\n"
+
424  "ldd r20,Z+8\n"
+
425  "rol r17\n"
+
426  "rol r18\n"
+
427  "rol r19\n"
+
428  "rol r20\n"
+
429  "std Z+11,r17\n"
+
430  "std Z+10,r18\n"
+
431  "std Z+9,r19\n"
+
432  "std Z+8,r20\n"
+
433  "ldd r17,Z+7\n"
+
434  "ldd r18,Z+6\n"
+
435  "ldd r19,Z+5\n"
+
436  "ldd r20,Z+4\n"
+
437  "rol r17\n"
+
438  "rol r18\n"
+
439  "rol r19\n"
+
440  "rol r20\n"
+
441  "std Z+7,r17\n"
+
442  "std Z+6,r18\n"
+
443  "std Z+5,r19\n"
+
444  "std Z+4,r20\n"
+
445  "ldd r17,Z+3\n"
+
446  "ldd r18,Z+2\n"
+
447  "ldd r19,Z+1\n"
+
448  "ld r20,Z\n"
+
449  "rol r17\n"
+
450  "rol r18\n"
+
451  "rol r19\n"
+
452  "rol r20\n"
+
453  "std Z+3,r17\n"
+
454  "std Z+2,r18\n"
+
455  "std Z+1,r19\n"
+
456  "st Z,r20\n"
+
457  "mov r17,__zero_reg__\n"
+
458  "sbc r17,__zero_reg__\n"
+
459  "andi r17,0x87\n"
+
460  "eor r16,r17\n"
+
461  "std Z+15,r16\n"
+
462  : : "z"(V)
+
463  : "r16", "r17", "r18", "r19", "r20"
+
464  );
+
465 #else
+
466  uint32_t V0 = be32toh(V[0]);
+
467  uint32_t V1 = be32toh(V[1]);
+
468  uint32_t V2 = be32toh(V[2]);
+
469  uint32_t V3 = be32toh(V[3]);
+
470  uint32_t mask = ((~(V0 >> 31)) + 1) & 0x00000087;
+
471  V0 = (V0 << 1) | (V1 >> 31);
+
472  V1 = (V1 << 1) | (V2 >> 31);
+
473  V2 = (V2 << 1) | (V3 >> 31);
+
474  V3 = (V3 << 1) ^ mask;
+
475  V[0] = htobe32(V0);
+
476  V[1] = htobe32(V1);
+
477  V[2] = htobe32(V2);
+
478  V[3] = htobe32(V3);
+
479 #endif
+
480 }
+
static void dblEAX(uint32_t V[4])
Doubles a value in the GF(2^128) field using EAX conventions.
Definition: GF128.cpp:406
+
static void mul(uint32_t Y[4], const uint32_t H[4])
Perform a multiplication in the GF(2^128) field.
Definition: GF128.cpp:90
+
static void dbl(uint32_t V[4])
Doubles a value in the GF(2^128) field.
Definition: GF128.cpp:314
+
static void mulInit(uint32_t H[4], const void *key)
Initialize multiplication in the GF(2^128) field.
Definition: GF128.cpp:58
+
+ + + + diff --git a/GF128_8h_source.html b/GF128_8h_source.html new file mode 100644 index 00000000..cf0ddcba --- /dev/null +++ b/GF128_8h_source.html @@ -0,0 +1,145 @@ + + + + + + +ArduinoLibs: GF128.h Source File + + + + + + + + + +
+
+ + + + + + +
+
ArduinoLibs +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
GF128.h
+
+
+
1 /*
+
2  * Copyright (C) 2016 Southern Storm Software, Pty Ltd.
+
3  *
+
4  * Permission is hereby granted, free of charge, to any person obtaining a
+
5  * copy of this software and associated documentation files (the "Software"),
+
6  * to deal in the Software without restriction, including without limitation
+
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+
8  * and/or sell copies of the Software, and to permit persons to whom the
+
9  * Software is furnished to do so, subject to the following conditions:
+
10  *
+
11  * The above copyright notice and this permission notice shall be included
+
12  * in all copies or substantial portions of the Software.
+
13  *
+
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+
15  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+
19  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+
20  * DEALINGS IN THE SOFTWARE.
+
21  */
+
22 
+
23 #ifndef CRYPTO_GF128_h
+
24 #define CRYPTO_GF128_h
+
25 
+
26 #include <inttypes.h>
+
27 
+
28 class GF128
+
29 {
+
30 private:
+
31  GF128() {}
+
32  ~GF128() {}
+
33 
+
34 public:
+
35  static void mulInit(uint32_t H[4], const void *key);
+
36  static void mul(uint32_t Y[4], const uint32_t H[4]);
+
37  static void dbl(uint32_t V[4]);
+
38  static void dblEAX(uint32_t V[4]);
+
39 };
+
40 
+
41 #endif
+
static void dblEAX(uint32_t V[4])
Doubles a value in the GF(2^128) field using EAX conventions.
Definition: GF128.cpp:406
+
Operations in the Galois field GF(2^128).
Definition: GF128.h:28
+
static void mul(uint32_t Y[4], const uint32_t H[4])
Perform a multiplication in the GF(2^128) field.
Definition: GF128.cpp:90
+
static void dbl(uint32_t V[4])
Doubles a value in the GF(2^128) field.
Definition: GF128.cpp:314
+
static void mulInit(uint32_t H[4], const void *key)
Initialize multiplication in the GF(2^128) field.
Definition: GF128.cpp:58
+
+ + + + diff --git a/GHASH_8cpp_source.html b/GHASH_8cpp_source.html index 3abab013..8d0dd3ad 100644 --- a/GHASH_8cpp_source.html +++ b/GHASH_8cpp_source.html @@ -111,8 +111,8 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
21  */
22 
23 #include "GHASH.h"
-
24 #include "Crypto.h"
-
25 #include "utility/EndianUtil.h"
+
24 #include "GF128.h"
+
25 #include "Crypto.h"
26 #include <string.h>
27 
47 GHASH::GHASH()
@@ -127,119 +127,70 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
59 
67 void GHASH::reset(const void *key)
68 {
-
69  // Copy the key into H and convert from big endian to host order.
-
70  memcpy(state.H, key, 16);
-
71 #if defined(CRYPTO_LITTLE_ENDIAN)
-
72  state.H[0] = be32toh(state.H[0]);
-
73  state.H[1] = be32toh(state.H[1]);
-
74  state.H[2] = be32toh(state.H[2]);
-
75  state.H[3] = be32toh(state.H[3]);
-
76 #endif
-
77 
-
78  // Reset the hash.
-
79  memset(state.Y, 0, sizeof(state.Y));
-
80  state.posn = 0;
-
81 }
-
82 
-
94 void GHASH::update(const void *data, size_t len)
-
95 {
-
96  // XOR the input with state.Y in 128-bit chunks and process them.
-
97  const uint8_t *d = (const uint8_t *)data;
-
98  while (len > 0) {
-
99  uint8_t size = 16 - state.posn;
-
100  if (size > len)
-
101  size = len;
-
102  uint8_t *y = ((uint8_t *)state.Y) + state.posn;
-
103  for (uint8_t i = 0; i < size; ++i)
-
104  y[i] ^= d[i];
-
105  state.posn += size;
-
106  len -= size;
-
107  d += size;
-
108  if (state.posn == 16) {
-
109  processChunk();
-
110  state.posn = 0;
-
111  }
-
112  }
-
113 }
-
114 
-
130 void GHASH::finalize(void *token, size_t len)
-
131 {
-
132  // Pad with zeroes to a multiple of 16 bytes.
-
133  pad();
-
134 
-
135  // The token is the current value of Y.
-
136  if (len > 16)
-
137  len = 16;
-
138  memcpy(token, state.Y, len);
-
139 }
-
140 
-
146 void GHASH::pad()
-
147 {
-
148  if (state.posn != 0) {
-
149  // Padding involves XOR'ing the rest of state.Y with zeroes,
-
150  // which does nothing. Immediately process the next chunk.
-
151  processChunk();
-
152  state.posn = 0;
-
153  }
-
154 }
-
155 
-
159 void GHASH::clear()
-
160 {
-
161  clean(state);
-
162 }
-
163 
-
164 void GHASH::processChunk()
-
165 {
-
166  uint32_t Z0 = 0; // Z = 0
-
167  uint32_t Z1 = 0;
-
168  uint32_t Z2 = 0;
-
169  uint32_t Z3 = 0;
-
170  uint32_t V0 = state.H[0]; // V = H
-
171  uint32_t V1 = state.H[1];
-
172  uint32_t V2 = state.H[2];
-
173  uint32_t V3 = state.H[3];
-
174 
-
175  // Multiply Z by V for the set bits in Y, starting at the top.
-
176  // This is a very simple bit by bit version that may not be very
-
177  // fast but it should be resistant to cache timing attacks.
-
178  for (uint8_t posn = 0; posn < 16; ++posn) {
-
179  uint8_t value = ((const uint8_t *)state.Y)[posn];
-
180  for (uint8_t bit = 0; bit < 8; ++bit, value <<= 1) {
-
181  // Extract the high bit of "value" and turn it into a mask.
-
182  uint32_t mask = (~((uint32_t)(value >> 7))) + 1;
-
183 
-
184  // XOR V with Z if the bit is 1.
-
185  Z0 ^= (V0 & mask);
-
186  Z1 ^= (V1 & mask);
-
187  Z2 ^= (V2 & mask);
-
188  Z3 ^= (V3 & mask);
-
189 
-
190  // Rotate V right by 1 bit.
-
191  mask = ((~(V3 & 0x01)) + 1) & 0xE1000000;
-
192  V3 = (V3 >> 1) | (V2 << 31);
-
193  V2 = (V2 >> 1) | (V1 << 31);
-
194  V1 = (V1 >> 1) | (V0 << 31);
-
195  V0 = (V0 >> 1) ^ mask;
-
196  }
-
197  }
-
198 
-
199  // We have finished the block so copy Z into Y and byte-swap.
-
200  state.Y[0] = htobe32(Z0);
-
201  state.Y[1] = htobe32(Z1);
-
202  state.Y[2] = htobe32(Z2);
-
203  state.Y[3] = htobe32(Z3);
-
204 }
-
void finalize(void *token, size_t len)
Finalizes the authentication process and returns the token.
Definition: GHASH.cpp:130
-
void update(const void *data, size_t len)
Updates the message authenticator with more data.
Definition: GHASH.cpp:94
+
69  GF128::mulInit(state.H, key);
+
70  memset(state.Y, 0, sizeof(state.Y));
+
71  state.posn = 0;
+
72 }
+
73 
+
85 void GHASH::update(const void *data, size_t len)
+
86 {
+
87  // XOR the input with state.Y in 128-bit chunks and process them.
+
88  const uint8_t *d = (const uint8_t *)data;
+
89  while (len > 0) {
+
90  uint8_t size = 16 - state.posn;
+
91  if (size > len)
+
92  size = len;
+
93  uint8_t *y = ((uint8_t *)state.Y) + state.posn;
+
94  for (uint8_t i = 0; i < size; ++i)
+
95  y[i] ^= d[i];
+
96  state.posn += size;
+
97  len -= size;
+
98  d += size;
+
99  if (state.posn == 16) {
+
100  GF128::mul(state.Y, state.H);
+
101  state.posn = 0;
+
102  }
+
103  }
+
104 }
+
105 
+
121 void GHASH::finalize(void *token, size_t len)
+
122 {
+
123  // Pad with zeroes to a multiple of 16 bytes.
+
124  pad();
+
125 
+
126  // The token is the current value of Y.
+
127  if (len > 16)
+
128  len = 16;
+
129  memcpy(token, state.Y, len);
+
130 }
+
131 
+
137 void GHASH::pad()
+
138 {
+
139  if (state.posn != 0) {
+
140  // Padding involves XOR'ing the rest of state.Y with zeroes,
+
141  // which does nothing. Immediately process the next chunk.
+
142  GF128::mul(state.Y, state.H);
+
143  state.posn = 0;
+
144  }
+
145 }
+
146 
+
150 void GHASH::clear()
+
151 {
+
152  clean(state);
+
153 }
+
void finalize(void *token, size_t len)
Finalizes the authentication process and returns the token.
Definition: GHASH.cpp:121
+
void update(const void *data, size_t len)
Updates the message authenticator with more data.
Definition: GHASH.cpp:85
~GHASH()
Destroys this GHASH message authenticator.
Definition: GHASH.cpp:55
-
void pad()
Pads the input stream with zero bytes to a multiple of 16.
Definition: GHASH.cpp:146
-
void clear()
Clears the authenticator's state, removing all sensitive data.
Definition: GHASH.cpp:159
+
void pad()
Pads the input stream with zero bytes to a multiple of 16.
Definition: GHASH.cpp:137
+
void clear()
Clears the authenticator's state, removing all sensitive data.
Definition: GHASH.cpp:150
+
static void mul(uint32_t Y[4], const uint32_t H[4])
Perform a multiplication in the GF(2^128) field.
Definition: GF128.cpp:90
GHASH()
Constructs a new GHASH message authenticator.
Definition: GHASH.cpp:47
void reset(const void *key)
Resets the GHASH message authenticator for a new session.
Definition: GHASH.cpp:67
+
static void mulInit(uint32_t H[4], const void *key)
Initialize multiplication in the GF(2^128) field.
Definition: GF128.cpp:58
diff --git a/GHASH_8h_source.html b/GHASH_8h_source.html index e23604b9..b33e848c 100644 --- a/GHASH_8h_source.html +++ b/GHASH_8h_source.html @@ -136,23 +136,21 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
46  uint32_t Y[4];
47  uint8_t posn;
48  } state;
-
49 
-
50  void processChunk();
-
51 };
-
52 
-
53 #endif
-
void finalize(void *token, size_t len)
Finalizes the authentication process and returns the token.
Definition: GHASH.cpp:130
-
void update(const void *data, size_t len)
Updates the message authenticator with more data.
Definition: GHASH.cpp:94
+
49 };
+
50 
+
51 #endif
+
void finalize(void *token, size_t len)
Finalizes the authentication process and returns the token.
Definition: GHASH.cpp:121
+
void update(const void *data, size_t len)
Updates the message authenticator with more data.
Definition: GHASH.cpp:85
~GHASH()
Destroys this GHASH message authenticator.
Definition: GHASH.cpp:55
-
void pad()
Pads the input stream with zero bytes to a multiple of 16.
Definition: GHASH.cpp:146
+
void pad()
Pads the input stream with zero bytes to a multiple of 16.
Definition: GHASH.cpp:137
Implementation of the GHASH message authenticator.
Definition: GHASH.h:29
-
void clear()
Clears the authenticator's state, removing all sensitive data.
Definition: GHASH.cpp:159
+
void clear()
Clears the authenticator's state, removing all sensitive data.
Definition: GHASH.cpp:150
GHASH()
Constructs a new GHASH message authenticator.
Definition: GHASH.cpp:47
void reset(const void *key)
Resets the GHASH message authenticator for a new session.
Definition: GHASH.cpp:67
diff --git a/Hash_8cpp_source.html b/Hash_8cpp_source.html index 5b59020a..bcf83d56 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 ad0ae542..7da88424 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 a7d04f62..b0fd2223 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 b5634b29..af3faba9 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 016ac9b6..dfbe0eb4 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 6d3533e6..c007c7bd 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 917fda78..7e7ae077 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 19245ab5..767af035 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 30dc0d88..57e55be6 100644 --- a/KeccakCore_8cpp_source.html +++ b/KeccakCore_8cpp_source.html @@ -1958,7 +1958,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/KeccakCore_8h_source.html b/KeccakCore_8h_source.html index 7436cb60..646202b4 100644 --- a/KeccakCore_8h_source.html +++ b/KeccakCore_8h_source.html @@ -165,7 +165,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/LCD_8cpp_source.html b/LCD_8cpp_source.html index 285df550..29a14fa9 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 5af2daf2..676a1d06 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 ced40a97..d54e0e14 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 8af16a1d..4ea0873f 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/Melody_8cpp_source.html b/Melody_8cpp_source.html index bb2fd610..dc9cf995 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 ca5ef26a..cecf4559 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 7c10821d..23b75777 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/NoiseSource_8cpp_source.html b/NoiseSource_8cpp_source.html index fddf7bca..5756ced3 100644 --- a/NoiseSource_8cpp_source.html +++ b/NoiseSource_8cpp_source.html @@ -138,7 +138,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/NoiseSource_8h_source.html b/NoiseSource_8h_source.html index 2f4ae863..e8dd0951 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 db825db8..ecec7d43 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 e59ad248..93f38107 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 new file mode 100644 index 00000000..59640739 --- /dev/null +++ b/OMAC_8cpp_source.html @@ -0,0 +1,216 @@ + + + + + + +ArduinoLibs: OMAC.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
ArduinoLibs +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
OMAC.cpp
+
+
+
1 /*
+
2  * Copyright (C) 2016 Southern Storm Software, Pty Ltd.
+
3  *
+
4  * Permission is hereby granted, free of charge, to any person obtaining a
+
5  * copy of this software and associated documentation files (the "Software"),
+
6  * to deal in the Software without restriction, including without limitation
+
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+
8  * and/or sell copies of the Software, and to permit persons to whom the
+
9  * Software is furnished to do so, subject to the following conditions:
+
10  *
+
11  * The above copyright notice and this permission notice shall be included
+
12  * in all copies or substantial portions of the Software.
+
13  *
+
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+
15  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+
19  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+
20  * DEALINGS IN THE SOFTWARE.
+
21  */
+
22 
+
23 #include "OMAC.h"
+
24 #include "GF128.h"
+
25 #include "Crypto.h"
+
26 #include <string.h>
+
27 
+ +
49  : _blockCipher(0)
+
50  , posn(0)
+
51 {
+
52 }
+
53 
+ +
60 {
+
61  clean(b);
+
62 }
+
63 
+
101 void OMAC::initFirst(uint8_t omac[16])
+
102 {
+
103  // Start the OMAC context. We assume that the data that follows
+
104  // will be at least 1 byte in length so that we can encrypt the
+
105  // zeroes now to derive the B value.
+
106  memset(omac, 0, 16);
+
107  _blockCipher->encryptBlock(omac, omac);
+
108  posn = 0;
+
109 
+
110  // Generate the B value from the encrypted block of zeroes.
+
111  // We will need this later when finalising the OMAC hashes.
+
112  memcpy(b, omac, 16);
+
113  GF128::dblEAX(b);
+
114 }
+
115 
+
127 void OMAC::initNext(uint8_t omac[16], uint8_t tag)
+
128 {
+
129  memset(omac, 0, 15);
+
130  omac[15] = tag;
+
131  posn = 16;
+
132 }
+
133 
+
143 void OMAC::update(uint8_t omac[16], const uint8_t *data, size_t size)
+
144 {
+
145  while (size > 0) {
+
146  // Encrypt the current block if it is already full.
+
147  if (posn == 16) {
+
148  _blockCipher->encryptBlock(omac, omac);
+
149  posn = 0;
+
150  }
+
151 
+
152  // XOR the incoming data with the current block.
+
153  uint8_t len = 16 - posn;
+
154  if (len > size)
+
155  len = (uint8_t)size;
+
156  for (uint8_t index = 0; index < len; ++index)
+
157  omac[posn++] ^= data[index];
+
158 
+
159  // Move onto the next block.
+
160  size -= len;
+
161  data += len;
+
162  }
+
163 }
+
164 
+
172 void OMAC::finalize(uint8_t omac[16])
+
173 {
+
174  // Apply padding if necessary.
+
175  if (posn != 16) {
+
176  // Need padding: XOR with P = 2 * B.
+
177  uint32_t p[4];
+
178  memcpy(p, b, 16);
+
179  GF128::dblEAX(p);
+
180  omac[posn] ^= 0x80;
+
181  for (uint8_t index = 0; index < 16; ++index)
+
182  omac[index] ^= ((const uint8_t *)p)[index];
+
183  clean(p);
+
184  } else {
+
185  // No padding necessary: XOR with B.
+
186  for (uint8_t index = 0; index < 16; ++index)
+
187  omac[index] ^= ((const uint8_t *)b)[index];
+
188  }
+
189 
+
190  // Encrypt the hash to get the final OMAC value.
+
191  _blockCipher->encryptBlock(omac, omac);
+
192 }
+
193 
+ +
198 {
+
199  clean(b);
+
200 }
+
void clear()
Clears all security-sensitive state from this object.
Definition: OMAC.cpp:197
+
void finalize(uint8_t omac[16])
Finalises an OMAC hashing context.
Definition: OMAC.cpp:172
+
~OMAC()
Destroys this OMAC object.
Definition: OMAC.cpp:59
+
static void dblEAX(uint32_t V[4])
Doubles a value in the GF(2^128) field using EAX conventions.
Definition: GF128.cpp:406
+
virtual void encryptBlock(uint8_t *output, const uint8_t *input)=0
Encrypts a single block using this cipher.
+
void initNext(uint8_t omac[16], uint8_t tag)
Initialises or restarts an OMAC hashing context.
Definition: OMAC.cpp:127
+
void update(uint8_t omac[16], const uint8_t *data, size_t size)
Updates an OMAC hashing context with more data.
Definition: OMAC.cpp:143
+
OMAC()
Constructs a new OMAC object.
Definition: OMAC.cpp:48
+
void initFirst(uint8_t omac[16])
Initialises the first OMAC hashing context and creates the B value.
Definition: OMAC.cpp:101
+
+ + + + diff --git a/OMAC_8h_source.html b/OMAC_8h_source.html new file mode 100644 index 00000000..4bd36e69 --- /dev/null +++ b/OMAC_8h_source.html @@ -0,0 +1,160 @@ + + + + + + +ArduinoLibs: OMAC.h Source File + + + + + + + + + +
+
+ + + + + + +
+
ArduinoLibs +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
OMAC.h
+
+
+
1 /*
+
2  * Copyright (C) 2016 Southern Storm Software, Pty Ltd.
+
3  *
+
4  * Permission is hereby granted, free of charge, to any person obtaining a
+
5  * copy of this software and associated documentation files (the "Software"),
+
6  * to deal in the Software without restriction, including without limitation
+
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+
8  * and/or sell copies of the Software, and to permit persons to whom the
+
9  * Software is furnished to do so, subject to the following conditions:
+
10  *
+
11  * The above copyright notice and this permission notice shall be included
+
12  * in all copies or substantial portions of the Software.
+
13  *
+
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+
15  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+
19  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+
20  * DEALINGS IN THE SOFTWARE.
+
21  */
+
22 
+
23 #ifndef CRYPTO_OMAC_H
+
24 #define CRYPTO_OMAC_H
+
25 
+
26 #include "BlockCipher.h"
+
27 
+
28 class OMAC
+
29 {
+
30 public:
+
31  OMAC();
+
32  ~OMAC();
+
33 
+
34  BlockCipher *blockCipher() const { return _blockCipher; }
+
35  void setBlockCipher(BlockCipher *cipher) { _blockCipher = cipher; }
+
36 
+
37  void initFirst(uint8_t omac[16]);
+
38  void initNext(uint8_t omac[16], uint8_t tag);
+
39  void update(uint8_t omac[16], const uint8_t *data, size_t size);
+
40  void finalize(uint8_t omac[16]);
+
41 
+
42  void clear();
+
43 
+
44 private:
+
45  BlockCipher *_blockCipher;
+
46  uint32_t b[4];
+
47  uint8_t posn;
+
48 };
+
49 
+
50 #endif
+
void clear()
Clears all security-sensitive state from this object.
Definition: OMAC.cpp:197
+
Implementation of the OMAC message authenticator.
Definition: OMAC.h:28
+
void finalize(uint8_t omac[16])
Finalises an OMAC hashing context.
Definition: OMAC.cpp:172
+
~OMAC()
Destroys this OMAC object.
Definition: OMAC.cpp:59
+
Abstract base class for block ciphers.
Definition: BlockCipher.h:29
+
void setBlockCipher(BlockCipher *cipher)
Sets the block cipher to use for this OMAC object.
Definition: OMAC.h:35
+
void initNext(uint8_t omac[16], uint8_t tag)
Initialises or restarts an OMAC hashing context.
Definition: OMAC.cpp:127
+
void update(uint8_t omac[16], const uint8_t *data, size_t size)
Updates an OMAC hashing context with more data.
Definition: OMAC.cpp:143
+
OMAC()
Constructs a new OMAC object.
Definition: OMAC.cpp:48
+
BlockCipher * blockCipher() const
Gets the block cipher that is in use for this OMAC object.
Definition: OMAC.h:34
+
void initFirst(uint8_t omac[16])
Initialises the first OMAC hashing context and creates the B value.
Definition: OMAC.cpp:101
+
+ + + + diff --git a/Poly1305_8cpp_source.html b/Poly1305_8cpp_source.html index 6fca2062..46965be0 100644 --- a/Poly1305_8cpp_source.html +++ b/Poly1305_8cpp_source.html @@ -355,7 +355,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Poly1305_8h_source.html b/Poly1305_8h_source.html index d864dfa7..30f1bec2 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 5ab3be07..de8d4a22 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 93028c84..a543d8a1 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 7bf5b28c..ad5b0221 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 5b1cac1d..65577c21 100644 --- a/RNG_8cpp_source.html +++ b/RNG_8cpp_source.html @@ -651,7 +651,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/RNG_8h_source.html b/RNG_8h_source.html index 54513a46..9ee9b21d 100644 --- a/RNG_8h_source.html +++ b/RNG_8h_source.html @@ -177,7 +177,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/RTC_8cpp_source.html b/RTC_8cpp_source.html index 9f46861b..404def9b 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 a0a0d8ac..b873dc92 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 a0a2318e..570d054e 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 78d198d4..e1441707 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 aa65238f..d8afe86e 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 a9d2f5b0..5a8ce465 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 232d825e..e7a729bd 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 f852238a..06437354 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 2ac5dc97..7d15ed09 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 991a8c5f..3866be72 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/SoftI2C_8cpp_source.html b/SoftI2C_8cpp_source.html index 5739e28f..a6a398b3 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 b749f955..409b1703 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 new file mode 100644 index 00000000..49479185 --- /dev/null +++ b/SpeckSmall_8cpp_source.html @@ -0,0 +1,723 @@ + + + + + + +ArduinoLibs: SpeckSmall.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
ArduinoLibs +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
SpeckSmall.cpp
+
+
+
1 /*
+
2  * Copyright (C) 2016 Southern Storm Software, Pty Ltd.
+
3  *
+
4  * Permission is hereby granted, free of charge, to any person obtaining a
+
5  * copy of this software and associated documentation files (the "Software"),
+
6  * to deal in the Software without restriction, including without limitation
+
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+
8  * and/or sell copies of the Software, and to permit persons to whom the
+
9  * Software is furnished to do so, subject to the following conditions:
+
10  *
+
11  * The above copyright notice and this permission notice shall be included
+
12  * in all copies or substantial portions of the Software.
+
13  *
+
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+
15  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+
19  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+
20  * DEALINGS IN THE SOFTWARE.
+
21  */
+
22 
+
23 #include "SpeckSmall.h"
+
24 #include "Crypto.h"
+
25 #include "utility/RotateUtil.h"
+
26 #include "utility/EndianUtil.h"
+
27 #include <string.h>
+
28 
+
57 // The "avr-gcc" compiler doesn't do a very good job of compiling
+
58 // code involving 64-bit values. So we have to use inline assembly.
+
59 // It also helps to break the state up into 32-bit quantities
+
60 // because "asm" supports register names like %A0, %B0, %C0, %D0
+
61 // for the bytes in a 32-bit quantity, but it does not support
+
62 // %E0, %F0, %G0, %H0 for the high bytes of a 64-bit quantity.
+
63 #if defined(__AVR__)
+
64 #define USE_AVR_INLINE_ASM 1
+
65 #endif
+
66 
+
67 // Pack/unpack byte-aligned big-endian 64-bit quantities.
+
68 #define pack64(data, value) \
+
69  do { \
+
70  uint64_t v = htobe64((value)); \
+
71  memcpy((data), &v, sizeof(uint64_t)); \
+
72  } while (0)
+
73 #define unpack64(value, data) \
+
74  do { \
+
75  memcpy(&(value), (data), sizeof(uint64_t)); \
+
76  (value) = be64toh((value)); \
+
77  } while (0)
+
78 
+ +
86 {
+
87 }
+
88 
+
89 SpeckSmall::~SpeckSmall()
+
90 {
+
91  clean(l);
+
92 }
+
93 
+
94 bool SpeckSmall::setKey(const uint8_t *key, size_t len)
+
95 {
+
96  // Try setting the key for the forward encryption direction.
+
97  if (!SpeckTiny::setKey(key, len))
+
98  return false;
+
99 
+
100 #if USE_AVR_INLINE_ASM
+
101  // Expand the key schedule to get the l and s values at the end
+
102  // of the schedule, which will allow us to reverse it later.
+
103  uint8_t mb = (rounds - 31) * 8;
+
104  __asm__ __volatile__ (
+
105  "ld r16,Z+\n" // s = k[0]
+
106  "ld r17,Z+\n"
+
107  "ld r18,Z+\n"
+
108  "ld r19,Z+\n"
+
109  "ld r20,Z+\n"
+
110  "ld r21,Z+\n"
+
111  "ld r22,Z+\n"
+
112  "ld r23,Z+\n"
+
113 
+
114  "mov r24,%3\n" // memcpy(l, k + 1, mb)
+
115  "3:\n"
+
116  "ld __tmp_reg__,Z+\n"
+
117  "st X+,__tmp_reg__\n"
+
118  "dec r24\n"
+
119  "brne 3b\n"
+
120  "sub %A1,%3\n" // return X to its initial value
+
121  "sbc %B1,__zero_reg__\n"
+
122 
+
123  "1:\n"
+
124 
+
125  // l[li_out] = (s + rightRotate8_64(l[li_in])) ^ i;
+
126  "add %A1,%2\n" // X = &(l[li_in])
+
127  "adc %B1,__zero_reg__\n"
+
128  "ld r15,X+\n" // x = rightRotate8_64(l[li_in])
+
129  "ld r8,X+\n"
+
130  "ld r9,X+\n"
+
131  "ld r10,X+\n"
+
132  "ld r11,X+\n"
+
133  "ld r12,X+\n"
+
134  "ld r13,X+\n"
+
135  "ld r14,X+\n"
+
136 
+
137  "add r8,r16\n" // x += s
+
138  "adc r9,r17\n"
+
139  "adc r10,r18\n"
+
140  "adc r11,r19\n"
+
141  "adc r12,r20\n"
+
142  "adc r13,r21\n"
+
143  "adc r14,r22\n"
+
144  "adc r15,r23\n"
+
145 
+
146  "eor r8,%4\n" // x ^= i
+
147 
+
148  // X = X - li_in + li_out
+
149  "ldi r24,8\n" // li_in = li_in + 1
+
150  "add %2,r24\n"
+
151  "sub %A1,%2\n" // return X to its initial value
+
152  "sbc %B1,__zero_reg__\n"
+
153  "ldi r25,0x1f\n"
+
154  "and %2,r25\n" // li_in = li_in % 4
+
155  "add %A1,%3\n" // X = &(l[li_out])
+
156  "adc %B1,__zero_reg__\n"
+
157 
+
158  "st X+,r8\n" // l[li_out] = x
+
159  "st X+,r9\n"
+
160  "st X+,r10\n"
+
161  "st X+,r11\n"
+
162  "st X+,r12\n"
+
163  "st X+,r13\n"
+
164  "st X+,r14\n"
+
165  "st X+,r15\n"
+
166 
+
167  "add %3,r24\n" // li_out = li_out + 1
+
168  "sub %A1,%3\n" // return X to its initial value
+
169  "sbc %B1,__zero_reg__\n"
+
170  "and %3,r25\n" // li_out = li_out % 4
+
171 
+
172  // s = leftRotate3_64(s) ^ l[li_out];
+
173  "lsl r16\n" // s = leftRotate1_64(s)
+
174  "rol r17\n"
+
175  "rol r18\n"
+
176  "rol r19\n"
+
177  "rol r20\n"
+
178  "rol r21\n"
+
179  "rol r22\n"
+
180  "rol r23\n"
+
181  "adc r16,__zero_reg__\n"
+
182 
+
183  "lsl r16\n" // s = leftRotate1_64(s)
+
184  "rol r17\n"
+
185  "rol r18\n"
+
186  "rol r19\n"
+
187  "rol r20\n"
+
188  "rol r21\n"
+
189  "rol r22\n"
+
190  "rol r23\n"
+
191  "adc r16,__zero_reg__\n"
+
192 
+
193  "lsl r16\n" // s = leftRotate1_64(s)
+
194  "rol r17\n"
+
195  "rol r18\n"
+
196  "rol r19\n"
+
197  "rol r20\n"
+
198  "rol r21\n"
+
199  "rol r22\n"
+
200  "rol r23\n"
+
201  "adc r16,__zero_reg__\n"
+
202 
+
203  "eor r16,r8\n" // s ^= x
+
204  "eor r17,r9\n"
+
205  "eor r18,r10\n"
+
206  "eor r19,r11\n"
+
207  "eor r20,r12\n"
+
208  "eor r21,r13\n"
+
209  "eor r22,r14\n"
+
210  "eor r23,r15\n"
+
211 
+
212  // Loop
+
213  "inc %4\n" // ++i
+
214  "dec %5\n" // --rounds
+
215  "breq 2f\n"
+
216  "rjmp 1b\n"
+
217  "2:\n"
+
218 
+
219  "add %A1,%3\n" // X = &(l[li_out])
+
220  "adc %B1,__zero_reg__\n"
+
221  "st X+,r16\n" // l[li_out] = s
+
222  "st X+,r17\n"
+
223  "st X+,r18\n"
+
224  "st X+,r19\n"
+
225  "st X+,r20\n"
+
226  "st X+,r21\n"
+
227  "st X+,r22\n"
+
228  "st X+,r23\n"
+
229 
+
230  : : "z"(k), "x"(l),
+
231  "r"((uint8_t)0), // initial value of li_in
+
232  "r"((uint8_t)mb), // initial value of li_out
+
233  "r"(0), // initial value of i
+
234  "r"(rounds - 1)
+
235  : "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
+
236  "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
+
237  "r24", "r25"
+
238  );
+
239  return true;
+
240 #else
+
241  // Expand the key schedule to get the l and s values at the end
+
242  // of the schedule, which will allow us to reverse it later.
+
243  uint8_t m = rounds - 30;
+
244  uint8_t li_in = 0;
+
245  uint8_t li_out = m - 1;
+
246  uint64_t s = k[0];
+
247  memcpy(l, k + 1, (m - 1) * sizeof(uint64_t));
+
248  for (uint8_t i = 0; i < (rounds - 1); ++i) {
+
249  l[li_out] = (s + rightRotate8_64(l[li_in])) ^ i;
+
250  s = leftRotate3_64(s) ^ l[li_out];
+
251  li_in = (li_in + 1) & 0x03;
+
252  li_out = (li_out + 1) & 0x03;
+
253  }
+
254 
+
255  // Save the final s value in the l array so that we can recover it later.
+
256  l[li_out] = s;
+
257  return true;
+
258 #endif
+
259 }
+
260 
+
261 void SpeckSmall::decryptBlock(uint8_t *output, const uint8_t *input)
+
262 {
+
263 #if USE_AVR_INLINE_ASM
+
264  uint64_t l[4];
+
265  uint32_t xlow, xhigh, ylow, yhigh;
+
266  uint32_t slow, shigh;
+
267  uint8_t li_in = (rounds + 3) & 0x03;
+
268  uint8_t li_out = (((rounds - 31) + li_in) & 0x03) * 8;
+
269  li_in *= 8;
+
270 
+
271  // Prepare to expand the key schedule.
+
272  __asm__ __volatile__ (
+
273  "add r30,%4\n" // Z = &(this->l[li_out])
+
274  "adc r31,__zero_reg__\n"
+
275  "ld __tmp_reg__,Z\n" // s = this->l[li_out]
+
276  "std %A0,__tmp_reg__\n"
+
277  "ldd __tmp_reg__,Z+1\n"
+
278  "std %B0,__tmp_reg__\n"
+
279  "ldd __tmp_reg__,Z+2\n"
+
280  "std %C0,__tmp_reg__\n"
+
281  "ldd __tmp_reg__,Z+3\n"
+
282  "std %D0,__tmp_reg__\n"
+
283  "ldd __tmp_reg__,Z+4\n"
+
284  "std %A1,__tmp_reg__\n"
+
285  "ldd __tmp_reg__,Z+5\n"
+
286  "std %B1,__tmp_reg__\n"
+
287  "ldd __tmp_reg__,Z+6\n"
+
288  "std %C1,__tmp_reg__\n"
+
289  "ldd __tmp_reg__,Z+7\n"
+
290  "std %D1,__tmp_reg__\n"
+
291  "sub r30,%4\n" // Point Z back to the start of this->l.
+
292  "sbc r31,__zero_reg__\n"
+
293 
+
294  "ldi r25,32\n" // Copy the entire this->l array into l.
+
295  "1:\n"
+
296  "ld __tmp_reg__,Z+\n"
+
297  "st X+,__tmp_reg__\n"
+
298  "dec r25\n"
+
299  "brne 1b\n"
+
300  : "=Q"(slow), "=Q"(shigh)
+
301  : "z"(this->l), "x"(l), "r"(li_out)
+
302  : "r25"
+
303  );
+
304 
+
305  // Unpack the input into the x and y variables, converting
+
306  // from big-endian into little-endian in the process.
+
307  __asm__ __volatile__ (
+
308  "ld %D1,Z\n"
+
309  "ldd %C1,Z+1\n"
+
310  "ldd %B1,Z+2\n"
+
311  "ldd %A1,Z+3\n"
+
312  "ldd %D0,Z+4\n"
+
313  "ldd %C0,Z+5\n"
+
314  "ldd %B0,Z+6\n"
+
315  "ldd %A0,Z+7\n"
+
316  "ldd %D3,Z+8\n"
+
317  "ldd %C3,Z+9\n"
+
318  "ldd %B3,Z+10\n"
+
319  "ldd %A3,Z+11\n"
+
320  "ldd %D2,Z+12\n"
+
321  "ldd %C2,Z+13\n"
+
322  "ldd %B2,Z+14\n"
+
323  "ldd %A2,Z+15\n"
+
324  : "=r"(xlow), "=r"(xhigh), "=r"(ylow), "=r"(yhigh)
+
325  : "z"(input)
+
326  );
+
327 
+
328  // Perform all decryption rounds while expanding the key schedule in-place.
+
329  __asm__ __volatile__ (
+
330  "mov r23,%9\n" // i = rounds - 1
+
331  "dec r23\n"
+
332  "1:\n"
+
333 
+
334  // Adjust x and y for this round using the key schedule word s.
+
335 
+
336  // y = rightRotate3_64(x ^ y);
+
337  "eor %A2,%A0\n" // y ^= x
+
338  "eor %B2,%B0\n"
+
339  "eor %C2,%C0\n"
+
340  "eor %D2,%D0\n"
+
341  "eor %A3,%A1\n"
+
342  "eor %B3,%B1\n"
+
343  "eor %C3,%C1\n"
+
344  "eor %D3,%D1\n"
+
345 
+
346  "bst %A2,0\n" // y = rightRotate1_64(y)
+
347  "ror %D3\n"
+
348  "ror %C3\n"
+
349  "ror %B3\n"
+
350  "ror %A3\n"
+
351  "ror %D2\n"
+
352  "ror %C2\n"
+
353  "ror %B2\n"
+
354  "ror %A2\n"
+
355  "bld %D3,7\n"
+
356 
+
357  "bst %A2,0\n" // y = rightRotate1_64(y)
+
358  "ror %D3\n"
+
359  "ror %C3\n"
+
360  "ror %B3\n"
+
361  "ror %A3\n"
+
362  "ror %D2\n"
+
363  "ror %C2\n"
+
364  "ror %B2\n"
+
365  "ror %A2\n"
+
366  "bld %D3,7\n"
+
367 
+
368  "bst %A2,0\n" // y = rightRotate1_64(y)
+
369  "ror %D3\n"
+
370  "ror %C3\n"
+
371  "ror %B3\n"
+
372  "ror %A3\n"
+
373  "ror %D2\n"
+
374  "ror %C2\n"
+
375  "ror %B2\n"
+
376  "ror %A2\n"
+
377  "bld %D3,7\n"
+
378 
+
379  // x = leftRotate8_64((x ^ s) - y);
+
380  "ldd __tmp_reg__,%A4\n" // x ^= s
+
381  "eor %A0,__tmp_reg__\n"
+
382  "ldd __tmp_reg__,%B4\n"
+
383  "eor %B0,__tmp_reg__\n"
+
384  "ldd __tmp_reg__,%C4\n"
+
385  "eor %C0,__tmp_reg__\n"
+
386  "ldd __tmp_reg__,%D4\n"
+
387  "eor %D0,__tmp_reg__\n"
+
388  "ldd __tmp_reg__,%A5\n"
+
389  "eor %A1,__tmp_reg__\n"
+
390  "ldd __tmp_reg__,%B5\n"
+
391  "eor %B1,__tmp_reg__\n"
+
392  "ldd __tmp_reg__,%C5\n"
+
393  "eor %C1,__tmp_reg__\n"
+
394  "ldd __tmp_reg__,%D5\n"
+
395  "eor %D1,__tmp_reg__\n"
+
396 
+
397  "sub %A0,%A2\n" // x -= y
+
398  "sbc %B0,%B2\n"
+
399  "sbc %C0,%C2\n"
+
400  "sbc %D0,%D2\n"
+
401  "sbc %A1,%A3\n"
+
402  "sbc %B1,%B3\n"
+
403  "sbc %C1,%C3\n"
+
404  "sbc %D1,%D3\n"
+
405 
+
406  "mov __tmp_reg__,%D1\n" // x = lefRotate8_64(x)
+
407  "mov %D1,%C1\n"
+
408  "mov %C1,%B1\n"
+
409  "mov %B1,%A1\n"
+
410  "mov %A1,%D0\n"
+
411  "mov %D0,%C0\n"
+
412  "mov %C0,%B0\n"
+
413  "mov %B0,%A0\n"
+
414  "mov %A0,__tmp_reg__\n"
+
415 
+
416  // On the last round we don't need to compute s so we
+
417  // can exit early here if i == 0.
+
418  "or r23,r23\n" // if (i == 0)
+
419  "brne 2f\n"
+
420  "rjmp 3f\n"
+
421  "2:\n"
+
422  "dec r23\n" // --i
+
423 
+
424  // Save x and y on the stack so we can reuse registers for t and s.
+
425  "push %A0\n"
+
426  "push %B0\n"
+
427  "push %C0\n"
+
428  "push %D0\n"
+
429  "push %A1\n"
+
430  "push %B1\n"
+
431  "push %C1\n"
+
432  "push %D1\n"
+
433  "push %A2\n"
+
434  "push %B2\n"
+
435  "push %C2\n"
+
436  "push %D2\n"
+
437  "push %A3\n"
+
438  "push %B3\n"
+
439  "push %C3\n"
+
440  "push %D3\n"
+
441 
+
442  // Compute the key schedule word s for the next round.
+
443 
+
444  // li_out = (li_out + 3) & 0x03;
+
445  "ldd r24,%7\n"
+
446  "ldi r25,24\n"
+
447  "add r24,r25\n"
+
448  "andi r24,0x1f\n"
+
449  "std %7,r24\n"
+
450 
+
451  // s = rightRotate3_64(s ^ l[li_out]);
+
452  "add %A8,r24\n" // Z = &(l[li_out])
+
453  "adc %B8,__zero_reg__\n"
+
454 
+
455  "ld %A0,Z\n" // t = l[li_out]
+
456  "ldd %B0,Z+1\n"
+
457  "ldd %C0,Z+2\n"
+
458  "ldd %D0,Z+3\n"
+
459  "ldd %A1,Z+4\n"
+
460  "ldd %B1,Z+5\n"
+
461  "ldd %C1,Z+6\n"
+
462  "ldd %D1,Z+7\n"
+
463 
+
464  "ldd %A2,%A4\n" // load s
+
465  "ldd %B2,%B4\n"
+
466  "ldd %C2,%C4\n"
+
467  "ldd %D2,%D4\n"
+
468  "ldd %A3,%A5\n"
+
469  "ldd %B3,%B5\n"
+
470  "ldd %C3,%C5\n"
+
471  "ldd %D3,%D5\n"
+
472 
+
473  "eor %A2,%A0\n" // s ^= t
+
474  "eor %B2,%B0\n"
+
475  "eor %C2,%C0\n"
+
476  "eor %D2,%D0\n"
+
477  "eor %A3,%A1\n"
+
478  "eor %B3,%B1\n"
+
479  "eor %C3,%C1\n"
+
480  "eor %D3,%D1\n"
+
481 
+
482  "bst %A2,0\n" // s = rightRotate1_64(s)
+
483  "ror %D3\n"
+
484  "ror %C3\n"
+
485  "ror %B3\n"
+
486  "ror %A3\n"
+
487  "ror %D2\n"
+
488  "ror %C2\n"
+
489  "ror %B2\n"
+
490  "ror %A2\n"
+
491  "bld %D3,7\n"
+
492 
+
493  "bst %A2,0\n" // s = rightRotate1_64(s)
+
494  "ror %D3\n"
+
495  "ror %C3\n"
+
496  "ror %B3\n"
+
497  "ror %A3\n"
+
498  "ror %D2\n"
+
499  "ror %C2\n"
+
500  "ror %B2\n"
+
501  "ror %A2\n"
+
502  "bld %D3,7\n"
+
503 
+
504  "bst %A2,0\n" // s = rightRotate1_64(s)
+
505  "ror %D3\n"
+
506  "ror %C3\n"
+
507  "ror %B3\n"
+
508  "ror %A3\n"
+
509  "ror %D2\n"
+
510  "ror %C2\n"
+
511  "ror %B2\n"
+
512  "ror %A2\n"
+
513  "bld %D3,7\n"
+
514 
+
515  "sub %A8,r24\n" // Z -= li_out
+
516  "sbc %B8,__zero_reg__\n"
+
517 
+
518  // li_in = (li_in + 3) & 0x03;
+
519  "ldd r24,%6\n"
+
520  "add r24,r25\n"
+
521  "andi r24,0x1f\n"
+
522  "std %6,r24\n"
+
523 
+
524  // l[li_in] = leftRotate8_64((l[li_out] ^ i) - s);
+
525  "add %A8,r24\n" // Z = &(l[li_in])
+
526  "adc %B8,__zero_reg__\n"
+
527 
+
528  "eor %A0,r23\n" // t ^= i
+
529 
+
530  "sub %A0,%A2\n" // t -= s
+
531  "sbc %B0,%B2\n"
+
532  "sbc %C0,%C2\n"
+
533  "sbc %D0,%D2\n"
+
534  "sbc %A1,%A3\n"
+
535  "sbc %B1,%B3\n"
+
536  "sbc %C1,%C3\n"
+
537  "sbc %D1,%D3\n"
+
538 
+
539  "st Z,%D1\n" // l[li_in] = leftRotate8_64(t)
+
540  "std Z+1,%A0\n"
+
541  "std Z+2,%B0\n"
+
542  "std Z+3,%C0\n"
+
543  "std Z+4,%D0\n"
+
544  "std Z+5,%A1\n"
+
545  "std Z+6,%B1\n"
+
546  "std Z+7,%C1\n"
+
547 
+
548  "sub %A8,r24\n" // Z -= li_in
+
549  "sbc %B8,__zero_reg__\n"
+
550 
+
551  "std %A4,%A2\n" // store s
+
552  "std %B4,%B2\n"
+
553  "std %C4,%C2\n"
+
554  "std %D4,%D2\n"
+
555  "std %A5,%A3\n"
+
556  "std %B5,%B3\n"
+
557  "std %C5,%C3\n"
+
558  "std %D5,%D3\n"
+
559 
+
560  // Pop registers from the stack to recover the x and y values.
+
561  "pop %D3\n"
+
562  "pop %C3\n"
+
563  "pop %B3\n"
+
564  "pop %A3\n"
+
565  "pop %D2\n"
+
566  "pop %C2\n"
+
567  "pop %B2\n"
+
568  "pop %A2\n"
+
569  "pop %D1\n"
+
570  "pop %C1\n"
+
571  "pop %B1\n"
+
572  "pop %A1\n"
+
573  "pop %D0\n"
+
574  "pop %C0\n"
+
575  "pop %B0\n"
+
576  "pop %A0\n"
+
577 
+
578  // Bottom of the loop.
+
579  "rjmp 1b\n"
+
580  "3:\n"
+
581 
+
582  : "+r"(xlow), "+r"(xhigh), "+r"(ylow), "+r"(yhigh),
+
583  "+Q"(slow), "+Q"(shigh), "+Q"(li_in), "+Q"(li_out)
+
584  : "z"(l), "r"(rounds)
+
585  : "r23", "r24", "r25"
+
586  );
+
587 
+
588  // Pack the results into the output and convert back to big-endian.
+
589  __asm__ __volatile__ (
+
590  "st Z,%D1\n"
+
591  "std Z+1,%C1\n"
+
592  "std Z+2,%B1\n"
+
593  "std Z+3,%A1\n"
+
594  "std Z+4,%D0\n"
+
595  "std Z+5,%C0\n"
+
596  "std Z+6,%B0\n"
+
597  "std Z+7,%A0\n"
+
598  "std Z+8,%D3\n"
+
599  "std Z+9,%C3\n"
+
600  "std Z+10,%B3\n"
+
601  "std Z+11,%A3\n"
+
602  "std Z+12,%D2\n"
+
603  "std Z+13,%C2\n"
+
604  "std Z+14,%B2\n"
+
605  "std Z+15,%A2\n"
+
606  : : "r"(xlow), "r"(xhigh), "r"(ylow), "r"(yhigh), "z"(output)
+
607  );
+
608 #else
+
609  uint64_t l[4];
+
610  uint64_t x, y, s;
+
611  uint8_t round;
+
612  uint8_t li_in = (rounds + 3) & 0x03;
+
613  uint8_t li_out = ((rounds - 31) + li_in) & 0x03;
+
614 
+
615  // Prepare the key schedule, starting at the end.
+
616  for (round = li_in; round != li_out; round = (round + 1) & 0x03)
+
617  l[round] = this->l[round];
+
618  s = this->l[li_out];
+
619 
+
620  // Unpack the input and convert from big-endian.
+
621  unpack64(x, input);
+
622  unpack64(y, input + 8);
+
623 
+
624  // Perform all decryption rounds except the last while
+
625  // expanding the decryption schedule on the fly.
+
626  for (uint8_t round = rounds - 1; round > 0; --round) {
+
627  // Decrypt using the current round key.
+
628  y = rightRotate3_64(x ^ y);
+
629  x = leftRotate8_64((x ^ s) - y);
+
630 
+
631  // Generate the round key for the previous round.
+
632  li_in = (li_in + 3) & 0x03;
+
633  li_out = (li_out + 3) & 0x03;
+
634  s = rightRotate3_64(s ^ l[li_out]);
+
635  l[li_in] = leftRotate8_64((l[li_out] ^ (round - 1)) - s);
+
636  }
+
637 
+
638  // Perform the final decryption round.
+
639  y = rightRotate3_64(x ^ y);
+
640  x = leftRotate8_64((x ^ s) - y);
+
641 
+
642  // Pack the output and convert to big-endian.
+
643  pack64(output, x);
+
644  pack64(output + 8, y);
+
645 #endif
+
646 }
+
647 
+ +
649 {
+ +
651  clean(l);
+
652 }
+
bool setKey(const uint8_t *key, size_t len)
Sets the key to use for future encryption and decryption operations.
Definition: SpeckTiny.cpp:109
+
void decryptBlock(uint8_t *output, const uint8_t *input)
Decrypts a single block using this cipher.
Definition: SpeckSmall.cpp:261
+
bool setKey(const uint8_t *key, size_t len)
Sets the key to use for future encryption and decryption operations.
Definition: SpeckSmall.cpp:94
+
void clear()
Clears all security-sensitive state from this block cipher.
Definition: SpeckSmall.cpp:648
+
SpeckSmall()
Constructs a small-memory Speck block cipher with no initial key.
Definition: SpeckSmall.cpp:85
+
void clear()
Clears all security-sensitive state from this block cipher.
Definition: SpeckTiny.cpp:532
+
+ + + + diff --git a/SpeckSmall_8h_source.html b/SpeckSmall_8h_source.html new file mode 100644 index 00000000..aa45320b --- /dev/null +++ b/SpeckSmall_8h_source.html @@ -0,0 +1,149 @@ + + + + + + +ArduinoLibs: SpeckSmall.h Source File + + + + + + + + + +
+
+ + + + + + +
+
ArduinoLibs +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
SpeckSmall.h
+
+
+
1 /*
+
2  * Copyright (C) 2016 Southern Storm Software, Pty Ltd.
+
3  *
+
4  * Permission is hereby granted, free of charge, to any person obtaining a
+
5  * copy of this software and associated documentation files (the "Software"),
+
6  * to deal in the Software without restriction, including without limitation
+
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+
8  * and/or sell copies of the Software, and to permit persons to whom the
+
9  * Software is furnished to do so, subject to the following conditions:
+
10  *
+
11  * The above copyright notice and this permission notice shall be included
+
12  * in all copies or substantial portions of the Software.
+
13  *
+
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+
15  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+
19  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+
20  * DEALINGS IN THE SOFTWARE.
+
21  */
+
22 
+
23 #ifndef CRYPTO_SPECK_SMALL_H
+
24 #define CRYPTO_SPECK_SMALL_H
+
25 
+
26 #include "SpeckTiny.h"
+
27 
+
28 class SpeckSmall : public SpeckTiny
+
29 {
+
30 public:
+
31  SpeckSmall();
+
32  virtual ~SpeckSmall();
+
33 
+
34  bool setKey(const uint8_t *key, size_t len);
+
35 
+
36  void decryptBlock(uint8_t *output, const uint8_t *input);
+
37 
+
38  void clear();
+
39 
+
40 private:
+
41  uint64_t l[4];
+
42 };
+
43 
+
44 #endif
+
Speck block cipher with a 128-bit block size (tiny-memory version).
Definition: SpeckTiny.h:30
+
Speck block cipher with a 128-bit block size (small-memory version).
Definition: SpeckSmall.h:28
+
void decryptBlock(uint8_t *output, const uint8_t *input)
Decrypts a single block using this cipher.
Definition: SpeckSmall.cpp:261
+
bool setKey(const uint8_t *key, size_t len)
Sets the key to use for future encryption and decryption operations.
Definition: SpeckSmall.cpp:94
+
void clear()
Clears all security-sensitive state from this block cipher.
Definition: SpeckSmall.cpp:648
+
SpeckSmall()
Constructs a small-memory Speck block cipher with no initial key.
Definition: SpeckSmall.cpp:85
+
+ + + + diff --git a/SpeckTiny_8cpp_source.html b/SpeckTiny_8cpp_source.html new file mode 100644 index 00000000..cc096d16 --- /dev/null +++ b/SpeckTiny_8cpp_source.html @@ -0,0 +1,604 @@ + + + + + + +ArduinoLibs: SpeckTiny.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
ArduinoLibs +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
SpeckTiny.cpp
+
+
+
1 /*
+
2  * Copyright (C) 2016 Southern Storm Software, Pty Ltd.
+
3  *
+
4  * Permission is hereby granted, free of charge, to any person obtaining a
+
5  * copy of this software and associated documentation files (the "Software"),
+
6  * to deal in the Software without restriction, including without limitation
+
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+
8  * and/or sell copies of the Software, and to permit persons to whom the
+
9  * Software is furnished to do so, subject to the following conditions:
+
10  *
+
11  * The above copyright notice and this permission notice shall be included
+
12  * in all copies or substantial portions of the Software.
+
13  *
+
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+
15  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+
19  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+
20  * DEALINGS IN THE SOFTWARE.
+
21  */
+
22 
+
23 #include "SpeckTiny.h"
+
24 #include "Crypto.h"
+
25 #include "utility/RotateUtil.h"
+
26 #include "utility/EndianUtil.h"
+
27 #include <string.h>
+
28 
+
60 // The "avr-gcc" compiler doesn't do a very good job of compiling
+
61 // code involving 64-bit values. So we have to use inline assembly.
+
62 // It also helps to break the state up into 32-bit quantities
+
63 // because "asm" supports register names like %A0, %B0, %C0, %D0
+
64 // for the bytes in a 32-bit quantity, but it does not support
+
65 // %E0, %F0, %G0, %H0 for the high bytes of a 64-bit quantity.
+
66 #if defined(__AVR__)
+
67 #define USE_AVR_INLINE_ASM 1
+
68 #endif
+
69 
+ +
77  : rounds(32)
+
78 {
+
79 }
+
80 
+
81 SpeckTiny::~SpeckTiny()
+
82 {
+
83  clean(k);
+
84 }
+
85 
+
86 size_t SpeckTiny::blockSize() const
+
87 {
+
88  return 16;
+
89 }
+
90 
+
91 size_t SpeckTiny::keySize() const
+
92 {
+
93  // Also supports 128-bit and 192-bit, but we only report 256-bit.
+
94  return 32;
+
95 }
+
96 
+
97 // Pack/unpack byte-aligned big-endian 64-bit quantities.
+
98 #define pack64(data, value) \
+
99  do { \
+
100  uint64_t v = htobe64((value)); \
+
101  memcpy((data), &v, sizeof(uint64_t)); \
+
102  } while (0)
+
103 #define unpack64(value, data) \
+
104  do { \
+
105  memcpy(&(value), (data), sizeof(uint64_t)); \
+
106  (value) = be64toh((value)); \
+
107  } while (0)
+
108 
+
109 bool SpeckTiny::setKey(const uint8_t *key, size_t len)
+
110 {
+
111 #if USE_AVR_INLINE_ASM
+
112  // Determine the number of rounds to use and validate the key length.
+
113  if (len == 32) {
+
114  rounds = 34;
+
115  } else if (len == 24) {
+
116  rounds = 33;
+
117  } else if (len == 16) {
+
118  rounds = 32;
+
119  } else {
+
120  return false;
+
121  }
+
122 
+
123  // Copy the bytes of the key into the "k" array in reverse order to
+
124  // convert big endian into little-endian.
+
125  __asm__ __volatile__ (
+
126  "1:\n"
+
127  "ld __tmp_reg__,-Z\n"
+
128  "st X+,__tmp_reg__\n"
+
129  "dec %2\n"
+
130  "brne 1b\n"
+
131  : : "x"(k), "z"(key + len), "r"(len)
+
132  );
+
133 #else
+
134  if (len == 32) {
+
135  rounds = 34;
+
136  unpack64(k[3], key);
+
137  unpack64(k[2], key + 8);
+
138  unpack64(k[1], key + 16);
+
139  unpack64(k[0], key + 24);
+
140  } else if (len == 24) {
+
141  rounds = 33;
+
142  unpack64(k[2], key);
+
143  unpack64(k[1], key + 8);
+
144  unpack64(k[0], key + 16);
+
145  } else if (len == 16) {
+
146  rounds = 32;
+
147  unpack64(k[1], key);
+
148  unpack64(k[0], key + 8);
+
149  } else {
+
150  return false;
+
151  }
+
152 #endif
+
153  return true;
+
154 }
+
155 
+
156 void SpeckTiny::encryptBlock(uint8_t *output, const uint8_t *input)
+
157 {
+
158 #if USE_AVR_INLINE_ASM
+
159  uint64_t l[4];
+
160  uint32_t xlow, xhigh, ylow, yhigh;
+
161  uint32_t slow, shigh;
+
162  uint8_t li_in = 0;
+
163  uint8_t li_out = (rounds - 31) * 8;
+
164 
+
165  // Copy the "k" array into "s" and the "l" array.
+
166  __asm__ __volatile__ (
+
167  "ldd r25,%4\n" // r25 = li_out
+
168 
+
169  "ld __tmp_reg__,Z+\n"
+
170  "std %A0,__tmp_reg__\n"
+
171  "ld __tmp_reg__,Z+\n"
+
172  "std %B0,__tmp_reg__\n"
+
173  "ld __tmp_reg__,Z+\n"
+
174  "std %C0,__tmp_reg__\n"
+
175  "ld __tmp_reg__,Z+\n"
+
176  "std %D0,__tmp_reg__\n"
+
177  "ld __tmp_reg__,Z+\n"
+
178  "std %A1,__tmp_reg__\n"
+
179  "ld __tmp_reg__,Z+\n"
+
180  "std %B1,__tmp_reg__\n"
+
181  "ld __tmp_reg__,Z+\n"
+
182  "std %C1,__tmp_reg__\n"
+
183  "ld __tmp_reg__,Z+\n"
+
184  "std %D1,__tmp_reg__\n"
+
185 
+
186  "1:\n" // l[0..] = k[1..]
+
187  "ld __tmp_reg__,Z+\n"
+
188  "st X+,__tmp_reg__\n"
+
189  "dec r25\n"
+
190  "brne 1b\n"
+
191  : "=Q"(slow), "=Q"(shigh)
+
192  : "z"(k), "x"(l), "Q"(li_out)
+
193  : "r25"
+
194  );
+
195 
+
196  // Unpack the input into the x and y variables, converting
+
197  // from big-endian into little-endian in the process.
+
198  __asm__ __volatile__ (
+
199  "ld %D1,Z\n"
+
200  "ldd %C1,Z+1\n"
+
201  "ldd %B1,Z+2\n"
+
202  "ldd %A1,Z+3\n"
+
203  "ldd %D0,Z+4\n"
+
204  "ldd %C0,Z+5\n"
+
205  "ldd %B0,Z+6\n"
+
206  "ldd %A0,Z+7\n"
+
207  "ldd %D3,Z+8\n"
+
208  "ldd %C3,Z+9\n"
+
209  "ldd %B3,Z+10\n"
+
210  "ldd %A3,Z+11\n"
+
211  "ldd %D2,Z+12\n"
+
212  "ldd %C2,Z+13\n"
+
213  "ldd %B2,Z+14\n"
+
214  "ldd %A2,Z+15\n"
+
215  : "=r"(xlow), "=r"(xhigh), "=r"(ylow), "=r"(yhigh)
+
216  : "z"(input)
+
217  );
+
218 
+
219  // Perform all encryption rounds while expanding the key schedule in-place.
+
220  __asm__ __volatile__ (
+
221  "mov r23,__zero_reg__\n" // i = 0
+
222  "1:\n"
+
223 
+
224  // Adjust x and y for this round using the key schedule word s.
+
225 
+
226  // x = (rightRotate8_64(x) + y) ^ s;
+
227  "mov __tmp_reg__,%A0\n" // x = rightRotate8_64(x)
+
228  "mov %A0,%B0\n"
+
229  "mov %B0,%C0\n"
+
230  "mov %C0,%D0\n"
+
231  "mov %D0,%A1\n"
+
232  "mov %A1,%B1\n"
+
233  "mov %B1,%C1\n"
+
234  "mov %C1,%D1\n"
+
235  "mov %D1,__tmp_reg__\n"
+
236 
+
237  "add %A0,%A2\n" // x += y
+
238  "adc %B0,%B2\n"
+
239  "adc %C0,%C2\n"
+
240  "adc %D0,%D2\n"
+
241  "adc %A1,%A3\n"
+
242  "adc %B1,%B3\n"
+
243  "adc %C1,%C3\n"
+
244  "adc %D1,%D3\n"
+
245 
+
246  "ldd __tmp_reg__,%A4\n" // x ^= s
+
247  "eor %A0,__tmp_reg__\n"
+
248  "ldd __tmp_reg__,%B4\n"
+
249  "eor %B0,__tmp_reg__\n"
+
250  "ldd __tmp_reg__,%C4\n"
+
251  "eor %C0,__tmp_reg__\n"
+
252  "ldd __tmp_reg__,%D4\n"
+
253  "eor %D0,__tmp_reg__\n"
+
254  "ldd __tmp_reg__,%A5\n"
+
255  "eor %A1,__tmp_reg__\n"
+
256  "ldd __tmp_reg__,%B5\n"
+
257  "eor %B1,__tmp_reg__\n"
+
258  "ldd __tmp_reg__,%C5\n"
+
259  "eor %C1,__tmp_reg__\n"
+
260  "ldd __tmp_reg__,%D5\n"
+
261  "eor %D1,__tmp_reg__\n"
+
262 
+
263  // y = leftRotate3_64(y) ^ x;
+
264  "lsl %A2\n" // y = leftRotate1_64(y)
+
265  "rol %B2\n"
+
266  "rol %C2\n"
+
267  "rol %D2\n"
+
268  "rol %A3\n"
+
269  "rol %B3\n"
+
270  "rol %C3\n"
+
271  "rol %D3\n"
+
272  "adc %A2,__zero_reg__\n"
+
273 
+
274  "lsl %A2\n" // y = leftRotate1_64(y)
+
275  "rol %B2\n"
+
276  "rol %C2\n"
+
277  "rol %D2\n"
+
278  "rol %A3\n"
+
279  "rol %B3\n"
+
280  "rol %C3\n"
+
281  "rol %D3\n"
+
282 
+
283  "adc %A2,__zero_reg__\n"
+
284  "lsl %A2\n" // y = leftRotate1_64(y)
+
285  "rol %B2\n"
+
286  "rol %C2\n"
+
287  "rol %D2\n"
+
288  "rol %A3\n"
+
289  "rol %B3\n"
+
290  "rol %C3\n"
+
291  "rol %D3\n"
+
292  "adc %A2,__zero_reg__\n"
+
293 
+
294  "eor %A2,%A0\n" // y ^= x
+
295  "eor %B2,%B0\n"
+
296  "eor %C2,%C0\n"
+
297  "eor %D2,%D0\n"
+
298  "eor %A3,%A1\n"
+
299  "eor %B3,%B1\n"
+
300  "eor %C3,%C1\n"
+
301  "eor %D3,%D1\n"
+
302 
+
303  // On the last round we don't need to compute s so we
+
304  // can exit early here if (i + 1) == rounds.
+
305  "mov __tmp_reg__,r23\n" // temp = i + 1
+
306  "inc __tmp_reg__\n"
+
307  "cp __tmp_reg__,%9\n" // if (temp == rounds) ...
+
308  "brne 2f\n"
+
309  "rjmp 3f\n"
+
310  "2:\n"
+
311 
+
312  // Save x and y on the stack so we can reuse registers for t and s.
+
313  "push %A0\n"
+
314  "push %B0\n"
+
315  "push %C0\n"
+
316  "push %D0\n"
+
317  "push %A1\n"
+
318  "push %B1\n"
+
319  "push %C1\n"
+
320  "push %D1\n"
+
321  "push %A2\n"
+
322  "push %B2\n"
+
323  "push %C2\n"
+
324  "push %D2\n"
+
325  "push %A3\n"
+
326  "push %B3\n"
+
327  "push %C3\n"
+
328  "push %D3\n"
+
329 
+
330  // Compute the key schedule word s for the next round.
+
331 
+
332  // l[li_out] = (s + rightRotate8_64(l[li_in])) ^ i;
+
333  "ldd r24,%6\n" // Z = &(l[li_in])
+
334  "add %A8,r24\n"
+
335  "adc %B8,__zero_reg__\n"
+
336 
+
337  "ld %D1,Z+\n" // t = rightRotate8_64(l[li_in])
+
338  "ld %A0,Z+\n"
+
339  "ld %B0,Z+\n"
+
340  "ld %C0,Z+\n"
+
341  "ld %D0,Z+\n"
+
342  "ld %A1,Z+\n"
+
343  "ld %B1,Z+\n"
+
344  "ld %C1,Z+\n"
+
345 
+
346  "ldd %A2,%A4\n" // load s
+
347  "ldd %B2,%B4\n"
+
348  "ldd %C2,%C4\n"
+
349  "ldd %D2,%D4\n"
+
350  "ldd %A3,%A5\n"
+
351  "ldd %B3,%B5\n"
+
352  "ldd %C3,%C5\n"
+
353  "ldd %D3,%D5\n"
+
354 
+
355  "add %A0,%A2\n" // t += s
+
356  "adc %B0,%B2\n"
+
357  "adc %C0,%C2\n"
+
358  "adc %D0,%D2\n"
+
359  "adc %A1,%A3\n"
+
360  "adc %B1,%B3\n"
+
361  "adc %C1,%C3\n"
+
362  "adc %D1,%D3\n"
+
363 
+
364  "eor %A0,r23\n" // t ^= i
+
365 
+
366  // Z = Z - li_in + li_out
+
367  "ldi r25,8\n" // li_in = li_in + 1
+
368  "add r24,r25\n"
+
369  "sub %A8,r24\n" // return Z to its initial value
+
370  "sbc %B8,__zero_reg__\n"
+
371  "andi r24,0x1f\n" // li_in = li_in % 4
+
372  "std %6,r24\n"
+
373  "ldd r24,%7\n" // Z = &(l[li_out])
+
374  "add %A8,r24\n"
+
375  "adc %B8,__zero_reg__\n"
+
376 
+
377  "st Z+,%A0\n" // l[li_out] = t
+
378  "st Z+,%B0\n"
+
379  "st Z+,%C0\n"
+
380  "st Z+,%D0\n"
+
381  "st Z+,%A1\n"
+
382  "st Z+,%B1\n"
+
383  "st Z+,%C1\n"
+
384  "st Z+,%D1\n"
+
385 
+
386  "add r24,r25\n" // li_out = li_out + 1
+
387  "sub %A8,r24\n" // return Z to its initial value
+
388  "sbc %B8,__zero_reg__\n"
+
389  "andi r24,0x1f\n" // li_out = li_out % 4
+
390  "std %7,r24\n"
+
391 
+
392  // s = leftRotate3_64(s) ^ l[li_out];
+
393  "lsl %A2\n" // s = leftRotate1_64(s)
+
394  "rol %B2\n"
+
395  "rol %C2\n"
+
396  "rol %D2\n"
+
397  "rol %A3\n"
+
398  "rol %B3\n"
+
399  "rol %C3\n"
+
400  "rol %D3\n"
+
401  "adc %A2,__zero_reg__\n"
+
402 
+
403  "lsl %A2\n" // s = leftRotate1_64(s)
+
404  "rol %B2\n"
+
405  "rol %C2\n"
+
406  "rol %D2\n"
+
407  "rol %A3\n"
+
408  "rol %B3\n"
+
409  "rol %C3\n"
+
410  "rol %D3\n"
+
411  "adc %A2,__zero_reg__\n"
+
412 
+
413  "lsl %A2\n" // s = leftRotate1_64(s)
+
414  "rol %B2\n"
+
415  "rol %C2\n"
+
416  "rol %D2\n"
+
417  "rol %A3\n"
+
418  "rol %B3\n"
+
419  "rol %C3\n"
+
420  "rol %D3\n"
+
421  "adc %A2,__zero_reg__\n"
+
422 
+
423  "eor %A2,%A0\n" // s ^= l[li_out]
+
424  "eor %B2,%B0\n"
+
425  "eor %C2,%C0\n"
+
426  "eor %D2,%D0\n"
+
427  "eor %A3,%A1\n"
+
428  "eor %B3,%B1\n"
+
429  "eor %C3,%C1\n"
+
430  "eor %D3,%D1\n"
+
431 
+
432  "std %A4,%A2\n" // store s
+
433  "std %B4,%B2\n"
+
434  "std %C4,%C2\n"
+
435  "std %D4,%D2\n"
+
436  "std %A5,%A3\n"
+
437  "std %B5,%B3\n"
+
438  "std %C5,%C3\n"
+
439  "std %D5,%D3\n"
+
440 
+
441  // Pop registers from the stack to recover the x and y values.
+
442  "pop %D3\n"
+
443  "pop %C3\n"
+
444  "pop %B3\n"
+
445  "pop %A3\n"
+
446  "pop %D2\n"
+
447  "pop %C2\n"
+
448  "pop %B2\n"
+
449  "pop %A2\n"
+
450  "pop %D1\n"
+
451  "pop %C1\n"
+
452  "pop %B1\n"
+
453  "pop %A1\n"
+
454  "pop %D0\n"
+
455  "pop %C0\n"
+
456  "pop %B0\n"
+
457  "pop %A0\n"
+
458 
+
459  // Bottom of the loop.
+
460  "inc r23\n"
+
461  "rjmp 1b\n"
+
462  "3:\n"
+
463 
+
464  : "+r"(xlow), "+r"(xhigh), "+r"(ylow), "+r"(yhigh),
+
465  "+Q"(slow), "+Q"(shigh), "+Q"(li_in), "+Q"(li_out)
+
466  : "z"(l), "r"(rounds)
+
467  : "r23", "r24", "r25"
+
468  );
+
469 
+
470  // Pack the results into the output and convert back to big-endian.
+
471  __asm__ __volatile__ (
+
472  "st Z,%D1\n"
+
473  "std Z+1,%C1\n"
+
474  "std Z+2,%B1\n"
+
475  "std Z+3,%A1\n"
+
476  "std Z+4,%D0\n"
+
477  "std Z+5,%C0\n"
+
478  "std Z+6,%B0\n"
+
479  "std Z+7,%A0\n"
+
480  "std Z+8,%D3\n"
+
481  "std Z+9,%C3\n"
+
482  "std Z+10,%B3\n"
+
483  "std Z+11,%A3\n"
+
484  "std Z+12,%D2\n"
+
485  "std Z+13,%C2\n"
+
486  "std Z+14,%B2\n"
+
487  "std Z+15,%A2\n"
+
488  : : "r"(xlow), "r"(xhigh), "r"(ylow), "r"(yhigh), "z"(output)
+
489  );
+
490 #else
+
491  uint64_t l[4];
+
492  uint64_t x, y, s;
+
493  uint8_t round;
+
494  uint8_t li_in = 0;
+
495  uint8_t li_out = rounds - 31;
+
496  uint8_t i = 0;
+
497 
+
498  // Copy the input block into the work registers.
+
499  unpack64(x, input);
+
500  unpack64(y, input + 8);
+
501 
+
502  // Prepare the key schedule.
+
503  memcpy(l, k + 1, li_out * sizeof(uint64_t));
+
504  s = k[0];
+
505 
+
506  // Perform all encryption rounds except the last.
+
507  for (round = rounds - 1; round > 0; --round, ++i) {
+
508  // Perform the round with the current key schedule word.
+
509  x = (rightRotate8_64(x) + y) ^ s;
+
510  y = leftRotate3_64(y) ^ x;
+
511 
+
512  // Calculate the next key schedule word.
+
513  l[li_out] = (s + rightRotate8_64(l[li_in])) ^ i;
+
514  s = leftRotate3_64(s) ^ l[li_out];
+
515  li_in = (li_in + 1) & 0x03;
+
516  li_out = (li_out + 1) & 0x03;
+
517  }
+
518 
+
519  // Perform the final round and copy to the output.
+
520  x = (rightRotate8_64(x) + y) ^ s;
+
521  y = leftRotate3_64(y) ^ x;
+
522  pack64(output, x);
+
523  pack64(output + 8, y);
+
524 #endif
+
525 }
+
526 
+
527 void SpeckTiny::decryptBlock(uint8_t *output, const uint8_t *input)
+
528 {
+
529  // Decryption is not supported by SpeckTiny. Use SpeckSmall instead.
+
530 }
+
531 
+ +
533 {
+
534  clean(k);
+
535 }
+
SpeckTiny()
Constructs a tiny-memory Speck block cipher with no initial key.
Definition: SpeckTiny.cpp:76
+
size_t blockSize() const
Size of a single block processed by this cipher, in bytes.
Definition: SpeckTiny.cpp:86
+
bool setKey(const uint8_t *key, size_t len)
Sets the key to use for future encryption and decryption operations.
Definition: SpeckTiny.cpp:109
+
void encryptBlock(uint8_t *output, const uint8_t *input)
Encrypts a single block using this cipher.
Definition: SpeckTiny.cpp:156
+
size_t keySize() const
Default size of the key for this block cipher, in bytes.
Definition: SpeckTiny.cpp:91
+
void decryptBlock(uint8_t *output, const uint8_t *input)
Decrypts a single block using this cipher.
Definition: SpeckTiny.cpp:527
+
void clear()
Clears all security-sensitive state from this block cipher.
Definition: SpeckTiny.cpp:532
+
+ + + + diff --git a/SpeckTiny_8h_source.html b/SpeckTiny_8h_source.html new file mode 100644 index 00000000..2cffd6b5 --- /dev/null +++ b/SpeckTiny_8h_source.html @@ -0,0 +1,162 @@ + + + + + + +ArduinoLibs: SpeckTiny.h Source File + + + + + + + + + +
+
+ + + + + + +
+
ArduinoLibs +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
SpeckTiny.h
+
+
+
1 /*
+
2  * Copyright (C) 2016 Southern Storm Software, Pty Ltd.
+
3  *
+
4  * Permission is hereby granted, free of charge, to any person obtaining a
+
5  * copy of this software and associated documentation files (the "Software"),
+
6  * to deal in the Software without restriction, including without limitation
+
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+
8  * and/or sell copies of the Software, and to permit persons to whom the
+
9  * Software is furnished to do so, subject to the following conditions:
+
10  *
+
11  * The above copyright notice and this permission notice shall be included
+
12  * in all copies or substantial portions of the Software.
+
13  *
+
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+
15  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+
19  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+
20  * DEALINGS IN THE SOFTWARE.
+
21  */
+
22 
+
23 #ifndef CRYPTO_SPECK_TINY_H
+
24 #define CRYPTO_SPECK_TINY_H
+
25 
+
26 #include "BlockCipher.h"
+
27 
+
28 class SpeckSmall;
+
29 
+
30 class SpeckTiny : public BlockCipher
+
31 {
+
32 public:
+
33  SpeckTiny();
+
34  virtual ~SpeckTiny();
+
35 
+
36  size_t blockSize() const;
+
37  size_t keySize() const;
+
38 
+
39  bool setKey(const uint8_t *key, size_t len);
+
40 
+
41  void encryptBlock(uint8_t *output, const uint8_t *input);
+
42  void decryptBlock(uint8_t *output, const uint8_t *input);
+
43 
+
44  void clear();
+
45 
+
46 private:
+
47  uint64_t k[4];
+
48  uint8_t rounds;
+
49 
+
50  friend class SpeckSmall;
+
51 };
+
52 
+
53 #endif
+
Abstract base class for block ciphers.
Definition: BlockCipher.h:29
+
SpeckTiny()
Constructs a tiny-memory Speck block cipher with no initial key.
Definition: SpeckTiny.cpp:76
+
size_t blockSize() const
Size of a single block processed by this cipher, in bytes.
Definition: SpeckTiny.cpp:86
+
bool setKey(const uint8_t *key, size_t len)
Sets the key to use for future encryption and decryption operations.
Definition: SpeckTiny.cpp:109
+
Speck block cipher with a 128-bit block size (tiny-memory version).
Definition: SpeckTiny.h:30
+
Speck block cipher with a 128-bit block size (small-memory version).
Definition: SpeckSmall.h:28
+
void encryptBlock(uint8_t *output, const uint8_t *input)
Encrypts a single block using this cipher.
Definition: SpeckTiny.cpp:156
+
size_t keySize() const
Default size of the key for this block cipher, in bytes.
Definition: SpeckTiny.cpp:91
+
void decryptBlock(uint8_t *output, const uint8_t *input)
Decrypts a single block using this cipher.
Definition: SpeckTiny.cpp:527
+
void clear()
Clears all security-sensitive state from this block cipher.
Definition: SpeckTiny.cpp:532
+
+ + + + diff --git a/Speck_8cpp_source.html b/Speck_8cpp_source.html index cef0f78f..54f5f948 100644 --- a/Speck_8cpp_source.html +++ b/Speck_8cpp_source.html @@ -447,8 +447,8 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
390  "rol %B3\n"
391  "rol %C3\n"
392  "rol %D3\n"
-
393 
-
394  "adc %A2,__zero_reg__\n"
+
393  "adc %A2,__zero_reg__\n"
+
394 
395  "lsl %A2\n" // y = leftRotate1_64(y)
396  "rol %B2\n"
397  "rol %C2\n"
@@ -679,7 +679,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/Speck_8h_source.html b/Speck_8h_source.html index 06e34031..c4cc2654 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/TextField_8cpp_source.html b/TextField_8cpp_source.html index d095fa0b..b5b926c5 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 629c2821..c919cced 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 79a5bd56..5045dd75 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 59a9ae7a..afa22733 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 91cc0e37..9a33bf02 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 c34a515b..e53e9832 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/alarm-clock_8dox.html b/alarm-clock_8dox.html index 07182c54..d46e3713 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 0ba0140e..531ce356 100644 --- a/alarm_clock.html +++ b/alarm_clock.html @@ -140,7 +140,7 @@ Completed Clock diff --git a/annotated.html b/annotated.html index c71918b7..f927cee7 100644 --- a/annotated.html +++ b/annotated.html @@ -125,41 +125,44 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); oCFormManager for a form containing data input/output fields oCGCMImplementation of the Galois Counter Mode (GCM) oCGCMCommonConcrete base class to assist with implementing GCM for 128-bit block ciphers -oCGHASHImplementation of the GHASH message authenticator -oCHashAbstract base class for cryptographic hash algorithms -oCI2CMasterAbstract base class for I2C master implementations -oCIntFieldField that manages the input of an integer value -oCIRreceiverManages the reception of RC-5 commands from an infrared remote control -oCKeccakCoreKeccak core sponge function -oCLCDEnhanced library for Freetronics 16x2 LCD shields -oCListFieldField that manages selection from a static list of items -oCMelodyPlays a melody on a digital output pin using tone() -oCNoiseSourceAbstract base class for random noise sources -oCOFBImplementation of the Output Feedback (OFB) mode for 128-bit block ciphers -oCOFBCommonConcrete base class to assist with implementing OFB for 128-bit block ciphers -oCPoly1305Poly1305 message authenticator -oCRingOscillatorNoiseSourceProcesses the signal from a ring oscillator based noise source -oCRNGClassPseudo random number generator suitable for cryptography -oCRTCBase class for realtime clock handlers -oCRTCAlarmStores alarm information from a realtime clock chip -oCRTCDateStores date information from a realtime clock chip -oCRTCTimeStores time information from a realtime clock chip -oCSHA256SHA-256 hash algorithm -oCSHA3_256SHA3-256 hash algorithm -oCSHA3_512SHA3-512 hash algorithm -oCSHA512SHA-512 hash algorithm -oCSoftI2CBit-banged implementation of an I2C master -oCSpeckSpeck block cipher with a 128-bit block size -oCSpeckLowMemorySpeck block cipher with a 128-bit block size (low-memory version) -oCTextFieldField that displays a read-only text value -oCTimeFieldField that manages the display and editing of a time value -\CTransistorNoiseSourceProcesses the signal from a transistor-based noise source +oCGF128Operations in the Galois field GF(2^128) +oCGHASHImplementation of the GHASH message authenticator +oCHashAbstract base class for cryptographic hash algorithms +oCI2CMasterAbstract base class for I2C master implementations +oCIntFieldField that manages the input of an integer value +oCIRreceiverManages the reception of RC-5 commands from an infrared remote control +oCKeccakCoreKeccak core sponge function +oCLCDEnhanced library for Freetronics 16x2 LCD shields +oCListFieldField that manages selection from a static list of items +oCMelodyPlays a melody on a digital output pin using tone() +oCNoiseSourceAbstract base class for random noise sources +oCOFBImplementation of the Output Feedback (OFB) mode for 128-bit block ciphers +oCOFBCommonConcrete base class to assist with implementing OFB for 128-bit block ciphers +oCOMACImplementation of the OMAC message authenticator +oCPoly1305Poly1305 message authenticator +oCRingOscillatorNoiseSourceProcesses the signal from a ring oscillator based noise source +oCRNGClassPseudo random number generator suitable for cryptography +oCRTCBase class for realtime clock handlers +oCRTCAlarmStores alarm information from a realtime clock chip +oCRTCDateStores date information from a realtime clock chip +oCRTCTimeStores time information from a realtime clock chip +oCSHA256SHA-256 hash algorithm +oCSHA3_256SHA3-256 hash algorithm +oCSHA3_512SHA3-512 hash algorithm +oCSHA512SHA-512 hash algorithm +oCSoftI2CBit-banged implementation of an I2C master +oCSpeckSpeck block cipher with a 128-bit block size +oCSpeckSmallSpeck block cipher with a 128-bit block size (small-memory version) +oCSpeckTinySpeck block cipher with a 128-bit block size (tiny-memory version) +oCTextFieldField that displays a read-only text value +oCTimeFieldField that manages the display and editing of a time value +\CTransistorNoiseSourceProcesses the signal from a transistor-based noise source diff --git a/blink-blink_8dox.html b/blink-blink_8dox.html index 6f66b10e..066e06fa 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 8f6ba52d..820346b9 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 e4a08884..cc66b8cd 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 799f6a51..f04ca114 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 ff934bd7..ff0d2cf1 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 a079ff1c..ba8f222b 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 a17a6489..31b8e03f 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 4d709762..9508c30e 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 5d242bc3..4ad01acf 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 2f56e6b3..6ac3c18f 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 63afb42b..39565308 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 f4257722..8a224fdb 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 43d406ba..5a66da36 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 48b77861..9d1da2cd 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 d6ee7c02..2c1d9863 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 b249ba59..d4dec83d 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 e0561749..cdcaaeae 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 66bf9f15..9e833e10 100644 --- a/classAuthenticatedCipher.html +++ b/classAuthenticatedCipher.html @@ -215,7 +215,7 @@ virtual encrypt() or decrypt(). That is, it is assumed that all extra data for authentication is available before the first payload data block and that it will be prepended to the payload for authentication. If the subclass needs to process the extra data after the payload, then it is responsible for saving data away until it is needed during computeTag() or checkTag().

This function can be called multiple times with separate extra data blocks for authentication. All such data will be concatenated into a single block for authentication purposes.

-

Implemented in ChaChaPoly, GCMCommon, and EAXCommon.

+

Implemented in ChaChaPoly, EAXCommon, and GCMCommon.

@@ -264,7 +264,7 @@ virtual 
Note
Authenticated cipher modes usually require that if the tag could not be verified, then all of the data that was previously decrypted must be discarded. It is unwise to use the decrypted data for any purpose before it can be verified. Callers are responsible for ensuring that any data returned via previous calls to decrypt() is discarded if checkTag() returns false.
See Also
computeTag()
-

Implemented in ChaChaPoly, GCMCommon, and EAXCommon.

+

Implemented in ChaChaPoly, EAXCommon, and GCMCommon.

@@ -310,7 +310,7 @@ virtual 
See Also
checkTag()
-

Implemented in ChaChaPoly, GCMCommon, and EAXCommon.

+

Implemented in ChaChaPoly, EAXCommon, and GCMCommon.

@@ -340,7 +340,7 @@ virtual 
See Also
computeTag()
-

Implemented in ChaChaPoly, GCMCommon, and EAXCommon.

+

Implemented in ChaChaPoly, EAXCommon, and GCMCommon.

@@ -351,7 +351,7 @@ virtual  diff --git a/classBLAKE2b-members.html b/classBLAKE2b-members.html index ea831f9b..01c5309c 100644 --- a/classBLAKE2b-members.html +++ b/classBLAKE2b-members.html @@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classBLAKE2b.html b/classBLAKE2b.html index 053ba75c..4501b94e 100644 --- a/classBLAKE2b.html +++ b/classBLAKE2b.html @@ -536,7 +536,7 @@ Additional Inherited Members diff --git a/classBLAKE2s-members.html b/classBLAKE2s-members.html index 7c170946..96d1bd27 100644 --- a/classBLAKE2s-members.html +++ b/classBLAKE2s-members.html @@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classBLAKE2s.html b/classBLAKE2s.html index 5cf01fcb..02741e39 100644 --- a/classBLAKE2s.html +++ b/classBLAKE2s.html @@ -536,7 +536,7 @@ Additional Inherited Members diff --git a/classBigNumberUtil-members.html b/classBigNumberUtil-members.html index b78dea75..9e27b223 100644 --- a/classBigNumberUtil-members.html +++ b/classBigNumberUtil-members.html @@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classBigNumberUtil.html b/classBigNumberUtil.html index e6e833c6..869fb3e8 100644 --- a/classBigNumberUtil.html +++ b/classBigNumberUtil.html @@ -893,7 +893,7 @@ Static Public Member Functions diff --git a/classBitmap-members.html b/classBitmap-members.html index 2e6d7a4d..44fa0eba 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 defa0877..bfa84696 100644 --- a/classBitmap.html +++ b/classBitmap.html @@ -1745,7 +1745,7 @@ class DMD diff --git a/classBlinkLED-members.html b/classBlinkLED-members.html index 76b18270..6abe3f7e 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 6f3cfd0d..9de1915e 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 e0b6c1e3..e20a9793 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 d3332fee..c93fe4e1 100644 --- a/classBlockCipher.html +++ b/classBlockCipher.html @@ -101,12 +101,13 @@ Inheritance diagram for BlockCipher:
-AESCommon -Speck -SpeckLowMemory -AES128 -AES192 -AES256 +AESCommon +Speck +SpeckTiny +AES128 +AES192 +AES256 +SpeckSmall
@@ -200,7 +201,7 @@ Public Member Functions
Returns
Returns the size of a block in bytes.
See Also
keySize(), encryptBlock()
-

Implemented in Speck, SpeckLowMemory, and AESCommon.

+

Implemented in SpeckTiny, Speck, and AESCommon.

@@ -229,7 +230,7 @@ Public Member Functions

Security-sensitive information includes key schedules and any temporary state that is used by encryptBlock() or decryptBlock() which is stored in the object itself.

See Also
setKey(), encryptBlock(), decryptBlock()
-

Implemented in Speck, SpeckLowMemory, and AESCommon.

+

Implemented in SpeckTiny, Speck, AESCommon, and SpeckSmall.

@@ -275,7 +276,7 @@ Public Member Functions
See Also
encryptBlock(), blockSize()
-

Implemented in Speck, SpeckLowMemory, and AESCommon.

+

Implemented in SpeckTiny, Speck, AESCommon, and SpeckSmall.

@@ -321,7 +322,7 @@ Public Member Functions
See Also
decryptBlock(), blockSize()
-

Implemented in Speck, SpeckLowMemory, and AESCommon.

+

Implemented in SpeckTiny, Speck, and AESCommon.

@@ -350,7 +351,7 @@ Public Member Functions

This value indicates the default, or recommended, size for the key.

See Also
setKey(), blockSize()
-

Implemented in AES256, AES192, AES128, Speck, and SpeckLowMemory.

+

Implemented in AES256, AES192, AES128, SpeckTiny, and Speck.

@@ -398,7 +399,7 @@ Public Member Functions

Use clear() or the destructor to remove the key and any other sensitive data from the object once encryption or decryption is complete.

See Also
keySize(), clear()
-

Implemented in AES256, AES192, AES128, Speck, and SpeckLowMemory.

+

Implemented in AES256, AES192, AES128, SpeckTiny, Speck, and SpeckSmall.

@@ -409,7 +410,7 @@ Public Member Functions diff --git a/classBlockCipher.png b/classBlockCipher.png index 88f52adc5283ea2d2563f10ef7f70563bf03e7d4..f42590e7afdcd665d45819ef02435230988bb552 100644 GIT binary patch literal 1450 zcmaKs3sllq9LN8}%)&C=wA?glscV9TF4I^FJ#Gm>O~t#jIG=j@(yfA{-4_jP{v_xatNogo2B zVPC-j09c9(^uq%Hgam5(A}DA(Pv=j7gWb*@1b>ss1j@1Tsnom&`JkHbjg5_FIfHP} zU6g_k*#&@$=9*ke_znQf&^W&>gmlQu>o2OR+^s&linG<3S{0M6F744RQ>w?|@uBqQ zC$?T$kfS?#JUi8Z9nA$(ERjNpl_VNL;IPUTX&(586oUWqwP#*0vwXH?{B7wTq8TBh`-ZFif1hvHK~cLx#ZKG`YKrPWr;>!*A71V3FNk8Uo)0Mq<`kOoifp2! z!q2W}rd*2)5s|!;?mITv8;mD94^eOEg}LIQk)Vx8+>8TWd^t13P~1AyppRA;KR7yx zm7QLuIz!bSQ_FQVW>2ycf9ofTSM)ceUOF4bDkrDSh;KhOX+obTm5eke7jwvWE0<&= z4o-ZHYd^A~@LlVcjH1_JY6?m>+qk3pamPd6-`ttV`i{{j!-Kw}(P<}1*leo$oe-UY z$CmgQjTxpBEM0(%^`n->C#R47I-rphpade1k*GMd4f?WYgS?l8DrfvqDv6Y`?RC#z z9!Kf11WZa%CBMsib}X}I3OS~S)FT6?_1mmBU)O4z|d8Y)oBYVPO+eVV9|`G)9BX$L5v!( zMw-(IG ztPG(z$4Nqihk0QNDWsWex~Ar5p~08aIHqU=x&0#Hf)24yt5)T@Zjh%(8z#U_jYEJu_d5+~)y&rmGdqdQVP)B5S=SBcl}+=2 zFm1qkV;B#D)60qPADRB1o_I6x!CN&fFe7q;|C}A%Gz+)3qRE}M1q^~8D}eJ4@e^*1 GIrR@W$k5CH literal 1456 zcmaJ>2~bl<7=D?Qz#vykMG8b8}|9;nTnRc@hwr8a>vTHQRB2{dg&jqx^}e;Yw;SX> zw@0T&OiEY;fI8{Ft_M_a05BkdL4ni^%y_w4c-_q+xTMT&KzI7_H$w*a30KV054HOg zg39WWCwxqYa?_p&8vq-A&bU=d7i^6oY_qPnbuj5RwZN%yMxAj;Sx>U$7Gv%yzxM(Q z`z$e%t-VombK+Kl0>Zpb57Kh*>{@pJ8|i@hiqoy}8OsEW8h5D^1792tqc2ONL)rbq zh&-U(PLKZBS6+_Gf7&HW?<-1$0oG@t*%F@9POMKD&E%-I5S`|lf zkh9USWxZjlRt+6`KpnZkeKFW&nocGbEnMG$62<>TGAtP&}G`a~2c>mruw2vTC-W`$B>>6ZBOo4Y;0J6GwTTMjFf5~$CF z9%yMmMwXTq#yqpFKuBJl#W)!-^{H;xGYY0=arkj(7m7QIhGrHnz zM{{!p+=DFRE7amr5}6nemL37wR(zY`=LeuqxC~7$vN(5U+MG{9Vo@q`&Q*&qYDpes$uc%a%;87SRR;c9zrDqWh z#=eH*NXXyh*Cye#wpF~5RdTo*3Ef9|uHn&QAoNo_*L@IP?q*$@X{El{oIZ13+QY_rho zi_|=B>wrTm$LKel(aJLTr?AlFPpi`UecgekOMb8Jy+7~Yy89nF{T(O6`ip92zHhb2 zb5I3D?h;bP{)1@OAEcLQD8;LOuh4iu%G&}hzf3)__QK8Y`8pnym%=$Ftn!e%E{YX* zX>hD?HX|Du2^i(=Tq@)Z!HpU-FzzL@W8yQef4;dRSmqzCovvecxJn)udxCq9d(Q8Z zI*(5p!Q7qX)~WmaqkeEM@!0BuWjZqZwmw$aogqfrD5k}78p3EmWU3urXR6|fc-fck zx+e!-JZ5@Vy5D)Jjb=^+kv^U;R=E1SqSe8fk4R-IXEjYJTf^;MkDlT-&s3tdkas+W zElvmfIw6;oydw`f<-Ve(`@9~X5GAg}vdvDm%1;~x#*IcOl8cEXwqVGvjwYPmB9HnC zoVSzanuXh;x48e$TXc~)beo17t_V diff --git a/classBoolField.html b/classBoolField.html index 35687165..f587778c 100644 --- a/classBoolField.html +++ b/classBoolField.html @@ -506,7 +506,7 @@ LiquidCrystal * 
diff --git a/classCBC-members.html b/classCBC-members.html index 2f50b766..c77a7b56 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 54fe03b9..d4e677b7 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 d4a3660d..69e99884 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 989173c6..93d43bae 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 6bb55f58..4f525413 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 9a21a838..2b0e903e 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 99cbc7f6..52872f34 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 aee96aaa..284561bc 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 6876dc92..2244ff90 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 969588a6..21e02614 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 b5d23c36..c0753356 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 dc38280b..20a839c1 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 e43eeff0..1111fc1c 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 6193a456..82bf9133 100644 --- a/classChaCha.html +++ b/classChaCha.html @@ -673,7 +673,7 @@ class ChaChaPoly< diff --git a/classChaChaPoly-members.html b/classChaChaPoly-members.html index 343198f7..bb1510d6 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 90afb7fe..32a3ff29 100644 --- a/classChaChaPoly.html +++ b/classChaChaPoly.html @@ -665,7 +665,7 @@ virtual  diff --git a/classCharlieplex-members.html b/classCharlieplex-members.html index 0d4e9be3..d2cacc4b 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 3815c5c1..f377791b 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 d47b69db..dfb06970 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 0bd5f27f..44f49738 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 8bbc43b7..e22de4ab 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 83f2fc0e..42534134 100644 --- a/classCipher.html +++ b/classCipher.html @@ -211,7 +211,7 @@ Public Member Functions

Clears all security-sensitive state from this cipher.

Security-sensitive information includes key schedules, initialization vectors, and any temporary state that is used by encrypt() or decrypt() which is stored in the cipher itself.

-

Implemented in ChaChaPoly, GCMCommon, ChaCha, EAXCommon, CTRCommon, CBCCommon, CFBCommon, and OFBCommon.

+

Implemented in ChaChaPoly, EAXCommon, GCMCommon, ChaCha, CTRCommon, CBCCommon, CFBCommon, and OFBCommon.

@@ -265,7 +265,7 @@ Public Member Functions

The decrypt() function can be called multiple times with different regions of the ciphertext data.

See Also
encrypt()
-

Implemented in ChaCha, ChaChaPoly, CTRCommon, GCMCommon, EAXCommon, CBCCommon, CFBCommon, and OFBCommon.

+

Implemented in ChaCha, ChaChaPoly, CTRCommon, EAXCommon, GCMCommon, CBCCommon, CFBCommon, and OFBCommon.

@@ -319,7 +319,7 @@ Public Member Functions

The encrypt() function can be called multiple times with different regions of the plaintext data.

See Also
decrypt()
-

Implemented in ChaCha, ChaChaPoly, CTRCommon, GCMCommon, EAXCommon, CBCCommon, CFBCommon, and OFBCommon.

+

Implemented in ChaCha, ChaChaPoly, CTRCommon, EAXCommon, GCMCommon, CBCCommon, CFBCommon, and OFBCommon.

@@ -347,7 +347,7 @@ Public Member Functions

Size of the initialization vector for this cipher, in bytes.

If the cipher does not need an initialization vector, this function will return zero.

-

Implemented in ChaCha, ChaChaPoly, GCMCommon, CBCCommon, CFBCommon, CTRCommon, EAXCommon, and OFBCommon.

+

Implemented in ChaCha, ChaChaPoly, EAXCommon, GCMCommon, CBCCommon, CFBCommon, CTRCommon, and OFBCommon.

@@ -376,7 +376,7 @@ Public Member Functions

If the cipher supports variable-sized keys, keySize() indicates the default or recommended key size. The cipher may support other key sizes.

See Also
setKey(), ivSize()
-

Implemented in ChaCha, ChaChaPoly, GCMCommon, CBCCommon, CFBCommon, CTRCommon, EAXCommon, and OFBCommon.

+

Implemented in ChaCha, ChaChaPoly, EAXCommon, GCMCommon, CBCCommon, CFBCommon, CTRCommon, and OFBCommon.

@@ -425,7 +425,7 @@ Public Member Functions
Note
The IV is not encoded into the output stream by encrypt(). The caller is responsible for communicating the IV to the other party.
See Also
ivSize()
-

Implemented in ChaCha, ChaChaPoly, CTRCommon, GCMCommon, EAXCommon, CBCCommon, CFBCommon, and OFBCommon.

+

Implemented in ChaCha, ChaChaPoly, CTRCommon, EAXCommon, GCMCommon, CBCCommon, CFBCommon, and OFBCommon.

@@ -474,7 +474,7 @@ Public Member Functions

Calling setKey() resets the cipher. Any temporary data that was being retained for encrypting partial blocks will be abandoned.

See Also
keySize(), clear()
-

Implemented in ChaCha, ChaChaPoly, CTRCommon, GCMCommon, EAXCommon, CBCCommon, CFBCommon, and OFBCommon.

+

Implemented in ChaCha, ChaChaPoly, CTRCommon, EAXCommon, GCMCommon, CBCCommon, CFBCommon, and OFBCommon.

@@ -485,7 +485,7 @@ Public Member Functions diff --git a/classCurve25519-members.html b/classCurve25519-members.html index 63188369..e322a9f9 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 38a0b1c1..ad2a7dc5 100644 --- a/classCurve25519.html +++ b/classCurve25519.html @@ -303,7 +303,7 @@ class Ed25519 diff --git a/classDMD-members.html b/classDMD-members.html index e5d9a444..55f6ef21 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 b3269e85..cb2f32de 100644 --- a/classDMD.html +++ b/classDMD.html @@ -755,7 +755,7 @@ Multiple panels diff --git a/classDS1307RTC-members.html b/classDS1307RTC-members.html index 73b3f47c..a90a50a8 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 8ebdd4aa..3dcbfbbb 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 fa8f5bd7..20e2102c 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 88d2ca00..5dd32711 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 05f97cfa..de662771 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 9406beb9..32d89c48 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 6b92c7a4..809605bc 100644 --- a/classEAX-members.html +++ b/classEAX-members.html @@ -93,8 +93,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); addAuthData(const void *data, size_t len)EAXCommonvirtual AuthenticatedCipher()AuthenticatedCipher authMode (defined in EAXCommon)EAXCommon - authPosn (defined in EAXCommon)EAXCommon - b (defined in EAXCommon)EAXCommon checkTag(const void *tag, size_t len)EAXCommonvirtual Cipher()Cipher clear()EAXCommonvirtual @@ -120,7 +118,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/classEAX.html b/classEAX.html index 6e7bf5fd..86c02397 100644 --- a/classEAX.html +++ b/classEAX.html @@ -211,7 +211,7 @@ class EAX< T >

References: https://en.wikipedia.org/wiki/EAX_mode, http://web.cs.ucdavis.edu/~rogaway/papers/eax.html

See Also
EAXCommon, GCM
-

Definition at line 79 of file EAX.h.

+

Definition at line 76 of file EAX.h.


The documentation for this class was generated from the following files:

All cryptographic algorithms have been optimized for 8-bit Arduino platforms like the Uno. Memory usage is also reduced, particularly for SHA256 and SHA512 which save 192 and 512 bytes respectively over traditional implementations. For all algorithms, static sbox tables and the like are placed into program memory to further reduce data memory usage.

ChaCha with 20 rounds and 256-bit keys is the recommended symmetric encryption algorithm because it is twice as fast as AES128, constant-time, and much more secure. AES128, AES192, and AES256 are provided for use in applications where compatibility with other systems is desirable.

-

If code size is an issue for your application (for example on very low end Arduino variants), then Speck on AVR is less than half the code size of ChaCha, at the cost of more data memory for the state and longer key setup times. The SpeckLowMemory class is even smaller at the cost of some performance when encrypting.

+

If code size is an issue for your application (for example on very low end Arduino variants), then Speck on AVR is less than half the code size of ChaCha, at the cost of more data memory for the state and longer key setup times. The SpeckTiny and SpeckSmall classes are even smaller at the cost of some performance when encrypting.

BLAKE2s and BLAKE2b are variations on the ChaCha stream cipher, designed for hashing, with 256-bit and 512-bit hash outputs respectively. They are intended as high performance replacements for SHA256 and SHA512 for when speed is critical but exact bit-compatibility of hash values is not.

Examples and other topics

@@ -127,11 +127,17 @@ Performance on AVR Speck (256-bit key, ECB mode)11.35us11.74us309.66us275 -SpeckLowMemory (128-bit key, ECB mode)35.25us10.22us35 +SpeckSmall (128-bit key, ECB mode)35.25us36.46us207.66us67 -SpeckLowMemory (192-bit key, ECB mode)36.56us13.62us35 +SpeckSmall (192-bit key, ECB mode)36.56us37.56us220.55us67 -SpeckLowMemory (256-bit key, ECB mode)37.87us16.89us35 +SpeckSmall (256-bit key, ECB mode)37.87us38.67us233.32us67 + +SpeckTiny (128-bit key, ECB mode)35.25us10.22us35 + +SpeckTiny (192-bit key, ECB mode)36.56us13.62us35 + +SpeckTiny (256-bit key, ECB mode)37.87us16.89us35 @@ -139,17 +145,23 @@ Performance on AVR ChaChaPoly41.20us41.19us902.36us221 -GCM<AES128>183.25us182.80us1272.73us284 +GCM<AES128>109.71us109.26us1265.69us284 -GCM<AES192>189.92us189.47us1492.60us316 +GCM<AES192>116.38us115.92us1485.56us316 -GCM<AES256>196.59us196.13us1767.33us348 +GCM<AES256>123.04us122.59us1760.28us348 -EAX<AES128>71.14us71.14us1329.44us268 +GCM<Speck> (256-bit key)87.78us87.32us714.41us378 -EAX<Speck> (128-bit key)26.01us26.01us735.46us362 +GCM<SpeckTiny> (256-bit key)114.30us113.84us1270.32us138 -EAX<SpeckLowMemory> (128-bit key)75.08us75.07us1243.66us122 +EAX<AES128>71.14us71.14us1311.97us268 + +EAX<AES256>97.80us97.80us1806.57us332 + +EAX<Speck> (256-bit key)27.27us27.26us760.74us362 + +EAX<SpeckTiny> (256-bit key)80.31us80.31us1316.60us122 @@ -177,7 +189,7 @@ Performance on AVR Poly130526.26us489.11us17.06us53 -GHASH148.14us17.09us21.87us33 +GHASH74.59us15.91us14.79us33 @@ -221,11 +233,17 @@ Performance on ARM Speck (256-bit key, ECB mode)1.03us1.01us39.31us288 -SpeckLowMemory (128-bit key, ECB mode)2.72us1.47us48 +SpeckSmall (128-bit key, ECB mode)2.72us2.30us26.89us80 -SpeckLowMemory (192-bit key, ECB mode)2.81us1.54us48 +SpeckSmall (192-bit key, ECB mode)2.80us2.39us27.80us80 -SpeckLowMemory (256-bit key, ECB mode)2.90us1.83us48 +SpeckSmall (256-bit key, ECB mode)2.90us2.48us29.08us80 + +SpeckTiny (128-bit key, ECB mode)2.72us1.47us48 + +SpeckTiny (192-bit key, ECB mode)2.81us1.54us48 + +SpeckTiny (256-bit key, ECB mode)2.90us1.83us48 @@ -233,17 +251,23 @@ Performance on ARM ChaChaPoly1.71us1.71us45.08us240 -GCM<AES128>10.29us10.29us223.82us312 +GCM<AES128>10.90us10.90us248.83us312 -GCM<AES192>11.50us11.51us265.62us344 +GCM<AES192>12.30us12.31us296.83us344 -GCM<AES256>12.67us12.67us313.06us376 +GCM<AES256>13.66us13.67us350.25us376 -EAX<AES128>12.29us12.29us236.47us280 +GCM<Speck> (256-bit key)5.27us5.28us75.31us408 -EAX<Speck> (128-bit key)2.65us2.65us79.46us384 +GCM<SpeckTiny> (256-bit key)7.06us7.07us94.20us168 -EAX<SpeckLowMemory> (128-bit key)6.29us6.29us106.60us144 +EAX<AES128>12.33us12.33us234.91us280 + +EAX<AES256>16.99us16.99us322.92us344 + +EAX<Speck> (256-bit key)2.80us2.80us81.63us384 + +EAX<SpeckTiny> (256-bit key)6.69us6.69us110.91us144 @@ -271,7 +295,7 @@ Performance on ARM Poly13050.81us19.01us2.57us60 -GHASH4.37us1.50us4.37us36 +GHASH4.47us1.52us2.60us36 @@ -292,7 +316,7 @@ Performance on ARM diff --git a/crypto_8dox.html b/crypto_8dox.html index 99f59543..53e9f927 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 4ee3c51b..bd735828 100644 --- a/crypto_rng.html +++ b/crypto_rng.html @@ -190,7 +190,7 @@ Destroying secret data diff --git a/crypto_rng_ring.html b/crypto_rng_ring.html index 9afcd255..2b3b662f 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 9ed82265..435a032f 100644 --- a/dir_1586d320a3b1e622174530fde769cda9.html +++ b/dir_1586d320a3b1e622174530fde769cda9.html @@ -102,7 +102,7 @@ Files diff --git a/dir_3dd03323535933fb3f714c41ff7a94da.html b/dir_3dd03323535933fb3f714c41ff7a94da.html index 8a4de2aa..434e9477 100644 --- a/dir_3dd03323535933fb3f714c41ff7a94da.html +++ b/dir_3dd03323535933fb3f714c41ff7a94da.html @@ -94,7 +94,7 @@ Files diff --git a/dir_48f64e79f12bd77ba047e9e436ec978c.html b/dir_48f64e79f12bd77ba047e9e436ec978c.html index f773f9a4..bd4c2570 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 c63d2358..979b162c 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 a04af41e..548053b9 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 9e39f71f..96d7a1d1 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 214a0f86..9fa478c5 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 46829e78..878a9987 100644 --- a/dir_bc0718b08fb2015b8e59c47b2805f60c.html +++ b/dir_bc0718b08fb2015b8e59c47b2805f60c.html @@ -112,7 +112,7 @@ Directories diff --git a/dir_be059bf9978ae156837504b1b8a7568c.html b/dir_be059bf9978ae156837504b1b8a7568c.html index 0720e79a..a2d5424f 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 ec7a328a..5608eea5 100644 --- a/dir_e2ce51835550ba18edf07a8311722290.html +++ b/dir_e2ce51835550ba18edf07a8311722290.html @@ -160,6 +160,10 @@ Files   file  GCM.h [code]   +file  GF128.cpp [code] +  +file  GF128.h [code] +  file  GHASH.cpp [code]   file  GHASH.h [code] @@ -180,6 +184,10 @@ Files   file  OFB.h [code]   +file  OMAC.cpp [code] +  +file  OMAC.h [code] +  file  Poly1305.cpp [code]   file  Poly1305.h [code] @@ -204,15 +212,19 @@ Files   file  Speck.h [code]   -file  SpeckLowMemory.cpp [code] +file  SpeckSmall.cpp [code]   -file  SpeckLowMemory.h [code] +file  SpeckSmall.h [code] +  +file  SpeckTiny.cpp [code] +  +file  SpeckTiny.h [code]   diff --git a/dir_f34881fcf60f680b800190d5274dfaea.html b/dir_f34881fcf60f680b800190d5274dfaea.html index 2793dfb8..3b5265b2 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 4d161a8c..105ff6d6 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 c1edf952..d121466d 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 2225bb44..43093c45 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 d0d48aa0..d2387138 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 f564a97c..9aa45b54 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 39043c74..44b8ae26 100644 --- a/files.html +++ b/files.html @@ -150,64 +150,70 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); o*Form.h o*GCM.cpp o*GCM.h -o*GHASH.cpp -o*GHASH.h -o*Hash.cpp -o*Hash.h -o*I2CMaster.cpp -o*I2CMaster.h -o*IntField.cpp -o*IntField.h -o*IRreceiver.cpp -o*IRreceiver.h -o*KeccakCore.cpp -o*KeccakCore.h -o*LCD.cpp -o*LCD.h -o*ListField.cpp -o*ListField.h -o*Melody.cpp -o*Melody.h -o*Mono5x7.h -o*NoiseSource.cpp -o*NoiseSource.h -o*OFB.cpp -o*OFB.h -o*Poly1305.cpp -o*Poly1305.h -o*PowerSave.cpp -o*PowerSave.h -o*RC5.h -o*RingOscillatorNoiseSource.cpp -o*RingOscillatorNoiseSource.h -o*RNG.cpp -o*RNG.h -o*RTC.cpp -o*RTC.h -o*SHA256.cpp -o*SHA256.h -o*SHA3.cpp -o*SHA3.h -o*SHA512.cpp -o*SHA512.h -o*SoftI2C.cpp -o*SoftI2C.h -o*Speck.cpp -o*Speck.h -o*SpeckLowMemory.cpp -o*SpeckLowMemory.h -o*TextField.cpp -o*TextField.h -o*TimeField.cpp -o*TimeField.h -o*TransistorNoiseSource.cpp -\*TransistorNoiseSource.h +o*GF128.cpp +o*GF128.h +o*GHASH.cpp +o*GHASH.h +o*Hash.cpp +o*Hash.h +o*I2CMaster.cpp +o*I2CMaster.h +o*IntField.cpp +o*IntField.h +o*IRreceiver.cpp +o*IRreceiver.h +o*KeccakCore.cpp +o*KeccakCore.h +o*LCD.cpp +o*LCD.h +o*ListField.cpp +o*ListField.h +o*Melody.cpp +o*Melody.h +o*Mono5x7.h +o*NoiseSource.cpp +o*NoiseSource.h +o*OFB.cpp +o*OFB.h +o*OMAC.cpp +o*OMAC.h +o*Poly1305.cpp +o*Poly1305.h +o*PowerSave.cpp +o*PowerSave.h +o*RC5.h +o*RingOscillatorNoiseSource.cpp +o*RingOscillatorNoiseSource.h +o*RNG.cpp +o*RNG.h +o*RTC.cpp +o*RTC.h +o*SHA256.cpp +o*SHA256.h +o*SHA3.cpp +o*SHA3.h +o*SHA512.cpp +o*SHA512.h +o*SoftI2C.cpp +o*SoftI2C.h +o*Speck.cpp +o*Speck.h +o*SpeckSmall.cpp +o*SpeckSmall.h +o*SpeckTiny.cpp +o*SpeckTiny.h +o*TextField.cpp +o*TextField.h +o*TimeField.cpp +o*TimeField.h +o*TransistorNoiseSource.cpp +\*TransistorNoiseSource.h diff --git a/functions.html b/functions.html index 7208198a..41c39196 100644 --- a/functions.html +++ b/functions.html @@ -190,7 +190,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_b.html b/functions_b.html index 499cdb36..bd2abb1f 100644 --- a/functions_b.html +++ b/functions_b.html @@ -156,6 +156,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  • BlockCipher() : BlockCipher
  • +
  • blockCipher() +: OMAC +
  • blockSize() : AESCommon , BLAKE2b @@ -168,10 +171,10 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); , SHA3_512 , SHA512 , Speck -, SpeckLowMemory +, SpeckTiny
  • BoolField() -: BoolField +: BoolField
  • byteCount() : DS1307RTC @@ -182,7 +185,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_c.html b/functions_c.html index 95b5dc95..7c16d1cf 100644 --- a/functions_c.html +++ b/functions_c.html @@ -185,13 +185,15 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); , Hash , KeccakCore , OFBCommon +, OMAC , Poly1305 , SHA256 , SHA3_256 , SHA3_512 , SHA512 , Speck -, SpeckLowMemory +, SpeckSmall +, SpeckTiny
  • Color : Bitmap @@ -224,7 +226,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_d.html b/functions_d.html index 5edf8785..471bf344 100644 --- a/functions_d.html +++ b/functions_d.html @@ -136,6 +136,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  • DayOfWeek : RTC
  • +
  • dbl() +: GF128 +
  • +
  • dblEAX() +: GF128 +
  • DECREMENT : RTC
  • @@ -154,7 +160,8 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : AESCommon , BlockCipher , Speck -, SpeckLowMemory +, SpeckSmall +, SpeckTiny
  • defaultField() : Form @@ -215,7 +222,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : RTCAlarm
  • drawBitmap() -: Bitmap +: Bitmap
  • drawChar() : Bitmap @@ -254,7 +261,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_e.html b/functions_e.html index 44574634..96566454 100644 --- a/functions_e.html +++ b/functions_e.html @@ -167,7 +167,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : AESCommon , BlockCipher , Speck -, SpeckLowMemory +, SpeckTiny
  • endWrite() : I2CMaster @@ -195,7 +195,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_enum.html b/functions_enum.html index 0e26072f..187ab51d 100644 --- a/functions_enum.html +++ b/functions_enum.html @@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_eval.html b/functions_eval.html index 317e21ac..6644524f 100644 --- a/functions_eval.html +++ b/functions_eval.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_f.html b/functions_f.html index 5a7bd9b4..35e6032a 100644 --- a/functions_f.html +++ b/functions_f.html @@ -137,6 +137,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); , BLAKE2s , GHASH , Hash +, OMAC , Poly1305 , SHA256 , SHA3_256 @@ -159,12 +160,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  • flags : RTCAlarm
  • -
  • font() -: Bitmap -
  • Font : Bitmap
  • +
  • font() +: Bitmap +
  • form() : Field
  • @@ -181,7 +182,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func.html b/functions_func.html index f146927c..8dad0de2 100644 --- a/functions_func.html +++ b/functions_func.html @@ -183,7 +183,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_b.html b/functions_func_b.html index e3603cfe..343743d2 100644 --- a/functions_func_b.html +++ b/functions_func_b.html @@ -146,6 +146,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  • BlockCipher() : BlockCipher
  • +
  • blockCipher() +: OMAC +
  • blockSize() : AESCommon , BLAKE2b @@ -158,7 +161,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); , SHA3_512 , SHA512 , Speck -, SpeckLowMemory +, SpeckTiny
  • BoolField() : BoolField @@ -172,7 +175,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_c.html b/functions_func_c.html index 56bab760..4a303baa 100644 --- a/functions_func_c.html +++ b/functions_func_c.html @@ -184,13 +184,15 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); , Hash , KeccakCore , OFBCommon +, OMAC , Poly1305 , SHA256 , SHA3_256 , SHA3_512 , SHA512 , Speck -, SpeckLowMemory +, SpeckSmall +, SpeckTiny
  • command() : IRreceiver @@ -220,7 +222,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_d.html b/functions_func_d.html index 3863810a..1279d92e 100644 --- a/functions_func_d.html +++ b/functions_func_d.html @@ -128,6 +128,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  • dayOfWeek() : RTC
  • +
  • dbl() +: GF128 +
  • +
  • dblEAX() +: GF128 +
  • decrypt() : CBCCommon , CFBCommon @@ -143,7 +149,8 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : AESCommon , BlockCipher , Speck -, SpeckLowMemory +, SpeckSmall +, SpeckTiny
  • defaultField() : Form @@ -213,7 +220,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : Bitmap
  • drawInvertedBitmap() -: Bitmap +: Bitmap
  • drawLine() : Bitmap @@ -222,7 +229,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : Bitmap
  • drawText() -: Bitmap +: Bitmap
  • DS1307RTC() : DS1307RTC @@ -237,7 +244,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_e.html b/functions_func_e.html index 85be211b..473e9c9b 100644 --- a/functions_func_e.html +++ b/functions_func_e.html @@ -166,7 +166,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : AESCommon , BlockCipher , Speck -, SpeckLowMemory +, SpeckTiny
  • endWrite() : I2CMaster @@ -194,7 +194,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_f.html b/functions_func_f.html index 9573de77..1fe269bb 100644 --- a/functions_func_f.html +++ b/functions_func_f.html @@ -136,6 +136,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); , BLAKE2s , GHASH , Hash +, OMAC , Poly1305 , SHA256 , SHA3_256 @@ -174,7 +175,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_g.html b/functions_func_g.html index 401b080d..f6c61063 100644 --- a/functions_func_g.html +++ b/functions_func_g.html @@ -141,7 +141,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_h.html b/functions_func_h.html index b8462dbd..c9998679 100644 --- a/functions_func_h.html +++ b/functions_func_h.html @@ -156,7 +156,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_i.html b/functions_func_i.html index 84fea4b9..083e721b 100644 --- a/functions_func_i.html +++ b/functions_func_i.html @@ -122,8 +122,14 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');  

    - i -

    diff --git a/functions_func_l.html b/functions_func_l.html index 1e4ef3a8..824b2724 100644 --- a/functions_func_l.html +++ b/functions_func_l.html @@ -129,7 +129,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : Field
  • LCD() -: LCD +: LCD
  • led() : Charlieplex @@ -151,7 +151,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_m.html b/functions_func_m.html index ff2272ea..eac74765 100644 --- a/functions_func_m.html +++ b/functions_func_m.html @@ -140,15 +140,19 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  • mul() : BigNumberUtil +, GF128
  • mul_P() : BigNumberUtil
  • +
  • mulInit() +: GF128 +
  • diff --git a/functions_func_n.html b/functions_func_n.html index 9a1062b9..9675d333 100644 --- a/functions_func_n.html +++ b/functions_func_n.html @@ -138,7 +138,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_o.html b/functions_func_o.html index caba025d..2b5f0f4a 100644 --- a/functions_func_o.html +++ b/functions_func_o.html @@ -131,6 +131,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  • offTime() : BlinkLED
  • +
  • OMAC() +: OMAC +
  • onTime() : BlinkLED
  • @@ -141,7 +144,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_p.html b/functions_func_p.html index efc51e1d..766bb902 100644 --- a/functions_func_p.html +++ b/functions_func_p.html @@ -164,7 +164,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_r.html b/functions_func_r.html index e8f81a37..7f5c49d5 100644 --- a/functions_func_r.html +++ b/functions_func_r.html @@ -211,7 +211,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_s.html b/functions_func_s.html index f2a20924..f8fc762c 100644 --- a/functions_func_s.html +++ b/functions_func_s.html @@ -153,6 +153,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); , EAXCommon , GCMCommon , OFBCommon +, OMAC
  • setCapacity() : KeccakCore @@ -210,7 +211,8 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); , GCMCommon , OFBCommon , Speck -, SpeckLowMemory +, SpeckSmall +, SpeckTiny
  • setLabel() : Field @@ -303,8 +305,11 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  • Speck() : Speck
  • -
  • SpeckLowMemory() -: SpeckLowMemory +
  • SpeckSmall() +: SpeckSmall +
  • +
  • SpeckTiny() +: SpeckTiny
  • startRead() : I2CMaster @@ -357,7 +362,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_t.html b/functions_func_t.html index 99879591..8faca5a3 100644 --- a/functions_func_t.html +++ b/functions_func_t.html @@ -153,7 +153,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_u.html b/functions_func_u.html index 166f2b5e..54865312 100644 --- a/functions_func_u.html +++ b/functions_func_u.html @@ -134,6 +134,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); , GHASH , Hash , KeccakCore +, OMAC , Poly1305 , SHA256 , SHA3_256 @@ -147,7 +148,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_v.html b/functions_func_v.html index 962c6103..ae379698 100644 --- a/functions_func_v.html +++ b/functions_func_v.html @@ -136,7 +136,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_w.html b/functions_func_w.html index d4d0532a..a399eed6 100644 --- a/functions_func_w.html +++ b/functions_func_w.html @@ -157,7 +157,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_func_~.html b/functions_func_~.html index 61b1c9fa..ee1c771c 100644 --- a/functions_func_~.html +++ b/functions_func_~.html @@ -182,6 +182,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  • ~OFBCommon() : OFBCommon
  • +
  • ~OMAC() +: OMAC +
  • ~Poly1305() : Poly1305
  • @@ -204,7 +207,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_g.html b/functions_g.html index 0cb7fde5..552a51f9 100644 --- a/functions_g.html +++ b/functions_g.html @@ -142,7 +142,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_h.html b/functions_h.html index 31ae262e..a0c07b0f 100644 --- a/functions_h.html +++ b/functions_h.html @@ -161,7 +161,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_i.html b/functions_i.html index 18c89c4f..f6039530 100644 --- a/functions_i.html +++ b/functions_i.html @@ -126,6 +126,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  • INCREMENT : RTC
  • +
  • initFirst() +: OMAC +
  • +
  • initNext() +: OMAC +
  • IntField() : IntField
  • @@ -177,7 +183,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_k.html b/functions_k.html index 28730aff..b88daf24 100644 --- a/functions_k.html +++ b/functions_k.html @@ -141,13 +141,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); , GCMCommon , OFBCommon , Speck -, SpeckLowMemory +, SpeckTiny diff --git a/functions_l.html b/functions_l.html index 1ad1f424..9dca3caa 100644 --- a/functions_l.html +++ b/functions_l.html @@ -130,7 +130,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : Field
  • LCD() -: LCD +: LCD
  • led() : Charlieplex @@ -152,7 +152,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_m.html b/functions_m.html index e7b93d0d..4452f37b 100644 --- a/functions_m.html +++ b/functions_m.html @@ -148,15 +148,19 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  • mul() : BigNumberUtil +, GF128
  • mul_P() : BigNumberUtil
  • +
  • mulInit() +: GF128 +
  • diff --git a/functions_n.html b/functions_n.html index 6bb8b349..f376de65 100644 --- a/functions_n.html +++ b/functions_n.html @@ -145,7 +145,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_o.html b/functions_o.html index 76bafddf..39b8df41 100644 --- a/functions_o.html +++ b/functions_o.html @@ -132,6 +132,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  • offTime() : BlinkLED
  • +
  • OMAC() +: OMAC +
  • onTime() : BlinkLED
  • @@ -142,7 +145,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_p.html b/functions_p.html index b445f9e0..e6ee622c 100644 --- a/functions_p.html +++ b/functions_p.html @@ -168,7 +168,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_r.html b/functions_r.html index 0eace179..c76f45e0 100644 --- a/functions_r.html +++ b/functions_r.html @@ -212,7 +212,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_s.html b/functions_s.html index c1d27add..cc15d9bd 100644 --- a/functions_s.html +++ b/functions_s.html @@ -126,12 +126,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  • save() : RNGClass
  • -
  • ScreenSaverMode -: LCD -
  • screenSaverMode() : LCD
  • +
  • ScreenSaverMode +: LCD +
  • scroll() : Bitmap
  • @@ -164,6 +164,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); , EAXCommon , GCMCommon , OFBCommon +, OMAC
  • setCapacity() : KeccakCore @@ -221,7 +222,8 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); , GCMCommon , OFBCommon , Speck -, SpeckLowMemory +, SpeckSmall +, SpeckTiny
  • setLabel() : Field @@ -314,8 +316,11 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  • Speck() : Speck
  • -
  • SpeckLowMemory() -: SpeckLowMemory +
  • SpeckSmall() +: SpeckSmall +
  • +
  • SpeckTiny() +: SpeckTiny
  • startRead() : I2CMaster @@ -368,7 +373,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_t.html b/functions_t.html index cab048a0..656b9588 100644 --- a/functions_t.html +++ b/functions_t.html @@ -154,7 +154,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_type.html b/functions_type.html index 045a1cff..ed6613c5 100644 --- a/functions_type.html +++ b/functions_type.html @@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_u.html b/functions_u.html index b9611a03..e9c07dbc 100644 --- a/functions_u.html +++ b/functions_u.html @@ -135,6 +135,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); , GHASH , Hash , KeccakCore +, OMAC , Poly1305 , SHA256 , SHA3_256 @@ -148,7 +149,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_v.html b/functions_v.html index fb37e0b1..a991e767 100644 --- a/functions_v.html +++ b/functions_v.html @@ -137,7 +137,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_vars.html b/functions_vars.html index 308a458f..63c3d64d 100644 --- a/functions_vars.html +++ b/functions_vars.html @@ -156,7 +156,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_w.html b/functions_w.html index c9113b16..7c837c83 100644 --- a/functions_w.html +++ b/functions_w.html @@ -164,7 +164,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_y.html b/functions_y.html index 10d430c9..407bda58 100644 --- a/functions_y.html +++ b/functions_y.html @@ -130,7 +130,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/functions_~.html b/functions_~.html index 11192aeb..2d9c1e08 100644 --- a/functions_~.html +++ b/functions_~.html @@ -183,6 +183,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  • ~OFBCommon() : OFBCommon
  • +
  • ~OMAC() +: OMAC +
  • ~Poly1305() : Poly1305
  • @@ -205,7 +208,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/group__power__save.html b/group__power__save.html index e5500233..e674f9bd 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 2a8e6880..f4a6254f 100644 --- a/hierarchy.html +++ b/hierarchy.html @@ -99,68 +99,71 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); ||oCAES192AES block cipher with 192-bit keys ||\CAES256AES block cipher with 256-bit keys |oCSpeckSpeck block cipher with a 128-bit block size -|\CSpeckLowMemorySpeck block cipher with a 128-bit block size (low-memory version) -oCCharlieplexManage an array of LED's in a charlieplexed arrangement -oCChaseLEDsChase LED's on output pins in a defined sequence -oCCipherAbstract base class for stream ciphers -|oCAuthenticatedCipherAbstract base class for authenticated ciphers -||oCChaChaPolyAuthenticated cipher based on ChaCha and Poly1305 -||oCEAXCommonConcrete base class to assist with implementing EAX for 128-bit block ciphers -|||\CEAX< T >Implementation of the EAX authenticated cipher -||\CGCMCommonConcrete base class to assist with implementing GCM for 128-bit block ciphers -|| \CGCM< T >Implementation of the Galois Counter Mode (GCM) -|oCCBCCommonConcrete base class to assist with implementing CBC for 128-bit block ciphers -||\CCBC< T >Implementation of the Cipher Block Chaining (CBC) mode for 128-bit block ciphers -|oCCFBCommonConcrete base class to assist with implementing CFB for 128-bit block ciphers -||\CCFB< T >Implementation of the Cipher Feedback (CFB) mode for 128-bit block ciphers -|oCChaChaChaCha stream cipher -|oCCTRCommonConcrete base class to assist with implementing CTR mode for 128-bit block ciphers -||\CCTR< T >Implementation of the Counter (CTR) mode for 128-bit block ciphers -|\COFBCommonConcrete base class to assist with implementing OFB for 128-bit block ciphers -| \COFB< T >Implementation of the Output Feedback (OFB) mode for 128-bit block ciphers -oCCurve25519Diffie-Hellman key agreement based on the elliptic curve modulo 2^255 - 19 -oCEd25519Digital signatures based on the elliptic curve modulo 2^255 - 19 -oCEEPROM24Reading and writing EEPROM's from the 24LCXX family -oCFieldManages a single data input/output field within a Form -|oCBoolFieldField that manages the input of a boolean value -|oCIntFieldField that manages the input of an integer value -|oCListFieldField that manages selection from a static list of items -|oCTextFieldField that displays a read-only text value -|\CTimeFieldField that manages the display and editing of a time value -oCFormManager for a form containing data input/output fields -oCGHASHImplementation of the GHASH message authenticator -oCHashAbstract base class for cryptographic hash algorithms -|oCBLAKE2bBLAKE2b hash algorithm -|oCBLAKE2sBLAKE2s hash algorithm -|oCSHA256SHA-256 hash algorithm -|oCSHA3_256SHA3-256 hash algorithm -|oCSHA3_512SHA3-512 hash algorithm -|\CSHA512SHA-512 hash algorithm -oCI2CMasterAbstract base class for I2C master implementations -|\CSoftI2CBit-banged implementation of an I2C master -oCIRreceiverManages the reception of RC-5 commands from an infrared remote control -oCKeccakCoreKeccak core sponge function -oCLiquidCrystal -|\CLCDEnhanced library for Freetronics 16x2 LCD shields -oCMelodyPlays a melody on a digital output pin using tone() -oCNoiseSourceAbstract base class for random noise sources -|oCRingOscillatorNoiseSourceProcesses the signal from a ring oscillator based noise source -|\CTransistorNoiseSourceProcesses the signal from a transistor-based noise source -oCPoly1305Poly1305 message authenticator -oCRNGClassPseudo random number generator suitable for cryptography -oCRTCBase class for realtime clock handlers -|oCDS1307RTCCommunicates with a DS1307 realtime clock chip via I2C -|oCDS3231RTCCommunicates with a DS3231 realtime clock chip via I2C -|\CDS3232RTCCommunicates with a DS3232 realtime clock chip via I2C -oCRTCAlarmStores alarm information from a realtime clock chip -oCRTCDateStores date information from a realtime clock chip -\CRTCTimeStores time information from a realtime clock chip +|\CSpeckTinySpeck block cipher with a 128-bit block size (tiny-memory version) +| \CSpeckSmallSpeck block cipher with a 128-bit block size (small-memory version) +oCCharlieplexManage an array of LED's in a charlieplexed arrangement +oCChaseLEDsChase LED's on output pins in a defined sequence +oCCipherAbstract base class for stream ciphers +|oCAuthenticatedCipherAbstract base class for authenticated ciphers +||oCChaChaPolyAuthenticated cipher based on ChaCha and Poly1305 +||oCEAXCommonConcrete base class to assist with implementing EAX for 128-bit block ciphers +|||\CEAX< T >Implementation of the EAX authenticated cipher +||\CGCMCommonConcrete base class to assist with implementing GCM for 128-bit block ciphers +|| \CGCM< T >Implementation of the Galois Counter Mode (GCM) +|oCCBCCommonConcrete base class to assist with implementing CBC for 128-bit block ciphers +||\CCBC< T >Implementation of the Cipher Block Chaining (CBC) mode for 128-bit block ciphers +|oCCFBCommonConcrete base class to assist with implementing CFB for 128-bit block ciphers +||\CCFB< T >Implementation of the Cipher Feedback (CFB) mode for 128-bit block ciphers +|oCChaChaChaCha stream cipher +|oCCTRCommonConcrete base class to assist with implementing CTR mode for 128-bit block ciphers +||\CCTR< T >Implementation of the Counter (CTR) mode for 128-bit block ciphers +|\COFBCommonConcrete base class to assist with implementing OFB for 128-bit block ciphers +| \COFB< T >Implementation of the Output Feedback (OFB) mode for 128-bit block ciphers +oCCurve25519Diffie-Hellman key agreement based on the elliptic curve modulo 2^255 - 19 +oCEd25519Digital signatures based on the elliptic curve modulo 2^255 - 19 +oCEEPROM24Reading and writing EEPROM's from the 24LCXX family +oCFieldManages a single data input/output field within a Form +|oCBoolFieldField that manages the input of a boolean value +|oCIntFieldField that manages the input of an integer value +|oCListFieldField that manages selection from a static list of items +|oCTextFieldField that displays a read-only text value +|\CTimeFieldField that manages the display and editing of a time value +oCFormManager for a form containing data input/output fields +oCGF128Operations in the Galois field GF(2^128) +oCGHASHImplementation of the GHASH message authenticator +oCHashAbstract base class for cryptographic hash algorithms +|oCBLAKE2bBLAKE2b hash algorithm +|oCBLAKE2sBLAKE2s hash algorithm +|oCSHA256SHA-256 hash algorithm +|oCSHA3_256SHA3-256 hash algorithm +|oCSHA3_512SHA3-512 hash algorithm +|\CSHA512SHA-512 hash algorithm +oCI2CMasterAbstract base class for I2C master implementations +|\CSoftI2CBit-banged implementation of an I2C master +oCIRreceiverManages the reception of RC-5 commands from an infrared remote control +oCKeccakCoreKeccak core sponge function +oCLiquidCrystal +|\CLCDEnhanced library for Freetronics 16x2 LCD shields +oCMelodyPlays a melody on a digital output pin using tone() +oCNoiseSourceAbstract base class for random noise sources +|oCRingOscillatorNoiseSourceProcesses the signal from a ring oscillator based noise source +|\CTransistorNoiseSourceProcesses the signal from a transistor-based noise source +oCOMACImplementation of the OMAC message authenticator +oCPoly1305Poly1305 message authenticator +oCRNGClassPseudo random number generator suitable for cryptography +oCRTCBase class for realtime clock handlers +|oCDS1307RTCCommunicates with a DS1307 realtime clock chip via I2C +|oCDS3231RTCCommunicates with a DS3231 realtime clock chip via I2C +|\CDS3232RTCCommunicates with a DS3232 realtime clock chip via I2C +oCRTCAlarmStores alarm information from a realtime clock chip +oCRTCDateStores date information from a realtime clock chip +\CRTCTimeStores time information from a realtime clock chip diff --git a/index.html b/index.html index 7e947145..a026edb6 100644 --- a/index.html +++ b/index.html @@ -133,7 +133,7 @@ Cryptographic Library
  • Stream ciphers: ChaCha
  • Authenticated encryption with associated data (AEAD): ChaChaPoly, EAX, GCM
  • Hash algorithms: SHA256, SHA512, SHA3_256, SHA3_512, BLAKE2s, BLAKE2b (regular and HMAC modes)
  • -
  • Message authenticators: Poly1305, GHASH
  • +
  • Message authenticators: Poly1305, GHASH, OMAC
  • Public key algorithms: Curve25519, Ed25519
  • Random number generation: RNG, TransistorNoiseSource, RingOscillatorNoiseSource
  • @@ -154,7 +154,7 @@ Other diff --git a/ir-dumpir_8dox.html b/ir-dumpir_8dox.html index e9b5f67e..26fdeb5c 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 7bf0784d..792c612b 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 18376c2d..3a16580a 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 6ff6d422..44970980 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 313fdbb2..0971c1bb 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 0009cae9..940b7432 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 9f119eb9..9d876333 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 223714d8..a65dfc76 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 b717f5b5..d4595416 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 e983ee35..12cef39d 100644 --- a/modules.html +++ b/modules.html @@ -87,7 +87,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/pages.html b/pages.html index ce8426d2..4aa46056 100644 --- a/pages.html +++ b/pages.html @@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/search/all_1.js b/search/all_1.js index 54f0becf..9fd5bf4c 100644 --- a/search/all_1.js +++ b/search/all_1.js @@ -16,8 +16,8 @@ var searchData= ['blink_2dstartrek_2edox',['blink-startrek.dox',['../blink-startrek_8dox.html',1,'']]], ['blinking_20led_20example',['Blinking LED Example',['../blink_blink.html',1,'']]], ['blinkled',['BlinkLED',['../classBlinkLED.html',1,'BlinkLED'],['../classBlinkLED.html#afc33958651e7ce6dceb428ea654c2c2f',1,'BlinkLED::BlinkLED()']]], - ['blockcipher',['BlockCipher',['../classBlockCipher.html',1,'BlockCipher'],['../classBlockCipher.html#adc3d7cba116cbea9ad017f4cded6fe2f',1,'BlockCipher::BlockCipher()']]], - ['blocksize',['blockSize',['../classAESCommon.html#ae26afdcc6d18e8888974acae16df1413',1,'AESCommon::blockSize()'],['../classBLAKE2b.html#abec1b2320c3afaed12a29cf081b95fe2',1,'BLAKE2b::blockSize()'],['../classBLAKE2s.html#a9b5403734c20a0591d72a98912e4a305',1,'BLAKE2s::blockSize()'],['../classBlockCipher.html#a7059a310487c128db034b0ce0ad425a0',1,'BlockCipher::blockSize()'],['../classHash.html#a4e4297812e3483410556830fe5d47bdf',1,'Hash::blockSize()'],['../classKeccakCore.html#a3742ed39151811b5d1c263c75ee5b20a',1,'KeccakCore::blockSize()'],['../classSHA256.html#a71bbd9064f9d6191d0647f867953a858',1,'SHA256::blockSize()'],['../classSHA3__256.html#a88a50ab6c2d4ad105cda2dd504d96e7c',1,'SHA3_256::blockSize()'],['../classSHA3__512.html#a4493a717bad8fa5cd35fe3aa36f25ab3',1,'SHA3_512::blockSize()'],['../classSHA512.html#acf8b9bcb6be91ee70acc3700a2ffa1a1',1,'SHA512::blockSize()'],['../classSpeck.html#a18a3b982a2cbc48befc8d498de08f188',1,'Speck::blockSize()'],['../classSpeckLowMemory.html#ae16cc24406ad4f93e499d1ed95453090',1,'SpeckLowMemory::blockSize()']]], + ['blockcipher',['BlockCipher',['../classBlockCipher.html',1,'BlockCipher'],['../classOMAC.html#abca82def496c6c6ab1ce5e5a958ec34a',1,'OMAC::blockCipher()'],['../classBlockCipher.html#adc3d7cba116cbea9ad017f4cded6fe2f',1,'BlockCipher::BlockCipher()']]], + ['blocksize',['blockSize',['../classAESCommon.html#ae26afdcc6d18e8888974acae16df1413',1,'AESCommon::blockSize()'],['../classBLAKE2b.html#abec1b2320c3afaed12a29cf081b95fe2',1,'BLAKE2b::blockSize()'],['../classBLAKE2s.html#a9b5403734c20a0591d72a98912e4a305',1,'BLAKE2s::blockSize()'],['../classBlockCipher.html#a7059a310487c128db034b0ce0ad425a0',1,'BlockCipher::blockSize()'],['../classHash.html#a4e4297812e3483410556830fe5d47bdf',1,'Hash::blockSize()'],['../classKeccakCore.html#a3742ed39151811b5d1c263c75ee5b20a',1,'KeccakCore::blockSize()'],['../classSHA256.html#a71bbd9064f9d6191d0647f867953a858',1,'SHA256::blockSize()'],['../classSHA3__256.html#a88a50ab6c2d4ad105cda2dd504d96e7c',1,'SHA3_256::blockSize()'],['../classSHA3__512.html#a4493a717bad8fa5cd35fe3aa36f25ab3',1,'SHA3_512::blockSize()'],['../classSHA512.html#acf8b9bcb6be91ee70acc3700a2ffa1a1',1,'SHA512::blockSize()'],['../classSpeck.html#a18a3b982a2cbc48befc8d498de08f188',1,'Speck::blockSize()'],['../classSpeckTiny.html#af8bbd1d1124fd1c4ef1aa167625376a9',1,'SpeckTiny::blockSize()']]], ['boolfield',['BoolField',['../classBoolField.html',1,'BoolField'],['../classBoolField.html#a5d4382cdcdc989de0179d8f3f3a59998',1,'BoolField::BoolField(const String &label)'],['../classBoolField.html#a49aad212ed18f84baa105c24e86281d9',1,'BoolField::BoolField(Form &form, const String &label, const String &trueLabel, const String &falseLabel, bool value)']]], ['bytecount',['byteCount',['../classDS1307RTC.html#a93c25269a9b78ab3331354db26672248',1,'DS1307RTC::byteCount()'],['../classDS3232RTC.html#a1319fe936dcb7e9d6bdf200b77a94f8e',1,'DS3232RTC::byteCount()'],['../classRTC.html#acfdebfb449710e44e11f9a3675e14fd8',1,'RTC::byteCount()']]] ]; diff --git a/search/all_10.js b/search/all_10.js index 6121d3e3..5b9a01ad 100644 --- a/search/all_10.js +++ b/search/all_10.js @@ -3,7 +3,7 @@ var searchData= ['star_20trek_20example',['Star Trek Example',['../blink_startrek.html',1,'']]], ['snake_20video_20game_20using_20an_20infrared_20remote_20control',['Snake Video Game Using an Infrared Remote Control',['../ir_snake.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)']]], ['second',['second',['../structRTCTime.html#a87b7c02e535d808dcba04c77e34abb91',1,'RTCTime::second()'],['../structRTCAlarm.html#ab749e3695ee5c5dd703aec71f72d46a1',1,'RTCAlarm::second()']]], ['seed_5fsize',['SEED_SIZE',['../classRNGClass.html#ae3a013bfc73795fd26ee36e70d89f4c2',1,'RNGClass']]], @@ -12,7 +12,7 @@ var searchData= ['setautosavetime',['setAutoSaveTime',['../classRNGClass.html#a5848e87a5f2f0302c88b0377f0e3366d',1,'RNGClass']]], ['setbacklightpin',['setBacklightPin',['../classLCD.html#a0b9b3b954290e7a3d94cdc829582b0a8',1,'LCD']]], ['setblinkrate',['setBlinkRate',['../classBlinkLED.html#a47f95624881063aa91c0066ed2c92258',1,'BlinkLED']]], - ['setblockcipher',['setBlockCipher',['../classCBCCommon.html#a0b7631244b0c2c954cfdb50eb32f7db1',1,'CBCCommon::setBlockCipher()'],['../classCFBCommon.html#a9161530f456efacb64f5008fdb1a460c',1,'CFBCommon::setBlockCipher()'],['../classCTRCommon.html#a6c409c4ec1f99e0cb751196d891dc228',1,'CTRCommon::setBlockCipher()'],['../classEAXCommon.html#a7db44040163b33f818cfaf47185251ca',1,'EAXCommon::setBlockCipher()'],['../classGCMCommon.html#a7abd3044862f8634f3b176aafa779ba2',1,'GCMCommon::setBlockCipher()'],['../classOFBCommon.html#a0053e2566a88859effffacbf1e4ade04',1,'OFBCommon::setBlockCipher()']]], + ['setblockcipher',['setBlockCipher',['../classCBCCommon.html#a0b7631244b0c2c954cfdb50eb32f7db1',1,'CBCCommon::setBlockCipher()'],['../classCFBCommon.html#a9161530f456efacb64f5008fdb1a460c',1,'CFBCommon::setBlockCipher()'],['../classCTRCommon.html#a6c409c4ec1f99e0cb751196d891dc228',1,'CTRCommon::setBlockCipher()'],['../classEAXCommon.html#a7db44040163b33f818cfaf47185251ca',1,'EAXCommon::setBlockCipher()'],['../classGCMCommon.html#a7abd3044862f8634f3b176aafa779ba2',1,'GCMCommon::setBlockCipher()'],['../classOFBCommon.html#a0053e2566a88859effffacbf1e4ade04',1,'OFBCommon::setBlockCipher()'],['../classOMAC.html#a8ae86bc629cca60cebb995d092ba06b4',1,'OMAC::setBlockCipher()']]], ['setcapacity',['setCapacity',['../classKeccakCore.html#ab3c1905f2002e49aca085d6f0b5546f7',1,'KeccakCore']]], ['setcounter',['setCounter',['../classChaCha.html#acab9109b7189ea88d9e5417a3a209eac',1,'ChaCha']]], ['setcountersize',['setCounterSize',['../classCTRCommon.html#ae2bc6b33a864412598b426320d853337',1,'CTRCommon']]], @@ -24,7 +24,7 @@ var searchData= ['setholdtime',['setHoldTime',['../classCharlieplex.html#a8502f4c752faba37023ced587695f6a4',1,'Charlieplex']]], ['setitems',['setItems',['../classListField.html#ae6709bce9355451b651893691456704e',1,'ListField']]], ['setiv',['setIV',['../classCBCCommon.html#ac7a586217835055b3a354bb932db160c',1,'CBCCommon::setIV()'],['../classCFBCommon.html#a597040eb7df40adbbef94b4c3975cd80',1,'CFBCommon::setIV()'],['../classChaCha.html#a734f3246b1e6810c63637b8cda26b259',1,'ChaCha::setIV()'],['../classChaChaPoly.html#a308056b17b3a4a496e9612ae19a2fd6f',1,'ChaChaPoly::setIV()'],['../classCipher.html#a3777acd8ff776a4e945bb7c9f2d044d9',1,'Cipher::setIV()'],['../classCTRCommon.html#aad289af3eb013cb3ffda6d7e8e8b3d04',1,'CTRCommon::setIV()'],['../classEAXCommon.html#a33a5da1f210f01c3622fbf27208f3d45',1,'EAXCommon::setIV()'],['../classGCMCommon.html#a2545135fe42c832e40e057b603824524',1,'GCMCommon::setIV()'],['../classOFBCommon.html#a4a35364cf30d78f1968cc00803686caf',1,'OFBCommon::setIV()']]], - ['setkey',['setKey',['../classAES128.html#a42d7548eb5084a2c3e2d5aa5f6f98ba4',1,'AES128::setKey()'],['../classAES192.html#a4ab37cff19fb05ceef1533ebc5e37cde',1,'AES192::setKey()'],['../classAES256.html#a6af085d2d6a730ff1e025f982121bbda',1,'AES256::setKey()'],['../classBlockCipher.html#a9a05307664469777592799c8f77397c4',1,'BlockCipher::setKey()'],['../classCBCCommon.html#add75ea4342a190e560cee26a8e9efc37',1,'CBCCommon::setKey()'],['../classCFBCommon.html#a45b9be25fb96f0e3ca5211b064e2baea',1,'CFBCommon::setKey()'],['../classChaCha.html#a6b2bdffbd3705e388bb458edb2f40c90',1,'ChaCha::setKey()'],['../classChaChaPoly.html#ae300892647dd92cbce711b834aa20c09',1,'ChaChaPoly::setKey()'],['../classCipher.html#a0dfe133bda81dfa680b668f5908ccbe5',1,'Cipher::setKey()'],['../classCTRCommon.html#a79da937dc2c444a174176beab33c055a',1,'CTRCommon::setKey()'],['../classEAXCommon.html#af5be5115c119610abb351028263d28de',1,'EAXCommon::setKey()'],['../classGCMCommon.html#a397c5dddde828c59eb63367385aec562',1,'GCMCommon::setKey()'],['../classOFBCommon.html#ac3a98e81d95ebc6c883baef5f4cfbefb',1,'OFBCommon::setKey()'],['../classSpeck.html#a7a07fc025bd25d832e9899333b5dabef',1,'Speck::setKey()'],['../classSpeckLowMemory.html#a0fda570e117f2b7977aaee3d1e93584b',1,'SpeckLowMemory::setKey()']]], + ['setkey',['setKey',['../classAES128.html#a42d7548eb5084a2c3e2d5aa5f6f98ba4',1,'AES128::setKey()'],['../classAES192.html#a4ab37cff19fb05ceef1533ebc5e37cde',1,'AES192::setKey()'],['../classAES256.html#a6af085d2d6a730ff1e025f982121bbda',1,'AES256::setKey()'],['../classBlockCipher.html#a9a05307664469777592799c8f77397c4',1,'BlockCipher::setKey()'],['../classCBCCommon.html#add75ea4342a190e560cee26a8e9efc37',1,'CBCCommon::setKey()'],['../classCFBCommon.html#a45b9be25fb96f0e3ca5211b064e2baea',1,'CFBCommon::setKey()'],['../classChaCha.html#a6b2bdffbd3705e388bb458edb2f40c90',1,'ChaCha::setKey()'],['../classChaChaPoly.html#ae300892647dd92cbce711b834aa20c09',1,'ChaChaPoly::setKey()'],['../classCipher.html#a0dfe133bda81dfa680b668f5908ccbe5',1,'Cipher::setKey()'],['../classCTRCommon.html#a79da937dc2c444a174176beab33c055a',1,'CTRCommon::setKey()'],['../classEAXCommon.html#af5be5115c119610abb351028263d28de',1,'EAXCommon::setKey()'],['../classGCMCommon.html#a397c5dddde828c59eb63367385aec562',1,'GCMCommon::setKey()'],['../classOFBCommon.html#ac3a98e81d95ebc6c883baef5f4cfbefb',1,'OFBCommon::setKey()'],['../classSpeck.html#a7a07fc025bd25d832e9899333b5dabef',1,'Speck::setKey()'],['../classSpeckSmall.html#a3345df135f6530bad475d630ef6c1038',1,'SpeckSmall::setKey()'],['../classSpeckTiny.html#a05180c773b9d26d3b67ff569dc86fc2d',1,'SpeckTiny::setKey()']]], ['setlabel',['setLabel',['../classField.html#ad4ea63599d780c35b296cf2840b69f7b',1,'Field']]], ['setled',['setLed',['../classCharlieplex.html#ab103c9687a0890faf72e4da79e3de0a5',1,'Charlieplex']]], ['setloopcount',['setLoopCount',['../classMelody.html#a507097a2e8ff51a5e9157e3a320ae35b',1,'Melody']]], @@ -66,7 +66,8 @@ var searchData= ['sleepfor',['sleepFor',['../group__power__save.html#ga95c1666038493a7f95be6768882eebad',1,'sleepFor(SleepDuration duration, uint8_t mode): PowerSave.cpp'],['../group__power__save.html#ga95c1666038493a7f95be6768882eebad',1,'sleepFor(SleepDuration duration, uint8_t mode=0): PowerSave.cpp']]], ['softi2c',['SoftI2C',['../classSoftI2C.html',1,'SoftI2C'],['../classSoftI2C.html#adb6e00ee3f930f1d32010a18feb5f6cc',1,'SoftI2C::SoftI2C()']]], ['speck',['Speck',['../classSpeck.html',1,'Speck'],['../classSpeck.html#a1f0ea433652d791317863de8a50a0580',1,'Speck::Speck()']]], - ['specklowmemory',['SpeckLowMemory',['../classSpeckLowMemory.html',1,'SpeckLowMemory'],['../classSpeckLowMemory.html#a200cb46d4f4044d691a60f4c19c6021c',1,'SpeckLowMemory::SpeckLowMemory()']]], + ['specksmall',['SpeckSmall',['../classSpeckSmall.html',1,'SpeckSmall'],['../classSpeckSmall.html#a0efa12c897f718a5a49cbd6f2fc6aca3',1,'SpeckSmall::SpeckSmall()']]], + ['specktiny',['SpeckTiny',['../classSpeckTiny.html',1,'SpeckTiny'],['../classSpeckTiny.html#a2ac351443979ea9da3521e79313cc580',1,'SpeckTiny::SpeckTiny()']]], ['startread',['startRead',['../classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde',1,'I2CMaster::startRead()'],['../classSoftI2C.html#aa0dafc067cfa374af75e060dca647ec3',1,'SoftI2C::startRead()']]], ['startwrite',['startWrite',['../classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35',1,'I2CMaster::startWrite()'],['../classSoftI2C.html#aa8a3219f4e6ff52306cc3c219f37d8f9',1,'SoftI2C::startWrite()']]], ['state',['state',['../classBlinkLED.html#ab89b5b3435998ea6699d4bf94866e233',1,'BlinkLED']]], diff --git a/search/all_12.js b/search/all_12.js index c0a76517..74eb88d5 100644 --- a/search/all_12.js +++ b/search/all_12.js @@ -3,6 +3,6 @@ var searchData= ['unpackbe',['unpackBE',['../classBigNumberUtil.html#a63f9d7884eb36227d39e1b95e219d865',1,'BigNumberUtil']]], ['unpackle',['unpackLE',['../classBigNumberUtil.html#a25041f898c417c8dd63f30536287ed79',1,'BigNumberUtil']]], ['unusedpin',['unusedPin',['../group__power__save.html#ga6dbe8e20a70e83cf5b068177675ec792',1,'PowerSave.h']]], - ['update',['update',['../classBLAKE2b.html#a468e48c66ce1738e11c922d133135069',1,'BLAKE2b::update()'],['../classBLAKE2s.html#aa192da2fa044b03cccaf11e87fdf9911',1,'BLAKE2s::update()'],['../classGHASH.html#a235edb14c6ed1ec55ddda595816ef1c7',1,'GHASH::update()'],['../classHash.html#aec9761ee427d122e7450de8df200265c',1,'Hash::update()'],['../classKeccakCore.html#aaaa0355ccec0f469ac8eb577bdf853ed',1,'KeccakCore::update()'],['../classPoly1305.html#ae4e0b647ff93f501bd01459b1616557c',1,'Poly1305::update()'],['../classSHA256.html#a555bf8efb17afd4842d2e55a1f39f27b',1,'SHA256::update()'],['../classSHA3__256.html#a8356957ea403c5da326fc6899b91ea71',1,'SHA3_256::update()'],['../classSHA3__512.html#a0563e4c87150e6019671b4fe92fd63a4',1,'SHA3_512::update()'],['../classSHA512.html#a7d37a20d7ab431ab15d094f768b6a695',1,'SHA512::update()']]], + ['update',['update',['../classBLAKE2b.html#a468e48c66ce1738e11c922d133135069',1,'BLAKE2b::update()'],['../classBLAKE2s.html#aa192da2fa044b03cccaf11e87fdf9911',1,'BLAKE2s::update()'],['../classGHASH.html#a235edb14c6ed1ec55ddda595816ef1c7',1,'GHASH::update()'],['../classHash.html#aec9761ee427d122e7450de8df200265c',1,'Hash::update()'],['../classKeccakCore.html#aaaa0355ccec0f469ac8eb577bdf853ed',1,'KeccakCore::update()'],['../classOMAC.html#a6692d7f37dd097fdfdd2b198aa0d9cde',1,'OMAC::update()'],['../classPoly1305.html#ae4e0b647ff93f501bd01459b1616557c',1,'Poly1305::update()'],['../classSHA256.html#a555bf8efb17afd4842d2e55a1f39f27b',1,'SHA256::update()'],['../classSHA3__256.html#a8356957ea403c5da326fc6899b91ea71',1,'SHA3_256::update()'],['../classSHA3__512.html#a0563e4c87150e6019671b4fe92fd63a4',1,'SHA3_512::update()'],['../classSHA512.html#a7d37a20d7ab431ab15d094f768b6a695',1,'SHA512::update()']]], ['updatecursor',['updateCursor',['../classField.html#afc612378167be0e7f8a6f8395b3537bd',1,'Field']]] ]; diff --git a/search/all_16.js b/search/all_16.js index a0f354d8..a8031df1 100644 --- a/search/all_16.js +++ b/search/all_16.js @@ -20,6 +20,7 @@ var searchData= ['_7ekeccakcore',['~KeccakCore',['../classKeccakCore.html#a4579e3a9b24f1d615fa8d660c23e77a4',1,'KeccakCore']]], ['_7enoisesource',['~NoiseSource',['../classNoiseSource.html#a4eca1e894a5d719fb9bf4df34a791cdb',1,'NoiseSource']]], ['_7eofbcommon',['~OFBCommon',['../classOFBCommon.html#aae7435157e51bf977d3481e94e17ae01',1,'OFBCommon']]], + ['_7eomac',['~OMAC',['../classOMAC.html#a6bb2222c997608ec68b25831da965e8f',1,'OMAC']]], ['_7epoly1305',['~Poly1305',['../classPoly1305.html#ac021b5ebbc123fa4c0ee36330472c25d',1,'Poly1305']]], ['_7erngclass',['~RNGClass',['../classRNGClass.html#aef3ee2fb14a39caf650dc90a0226dd31',1,'RNGClass']]], ['_7esha256',['~SHA256',['../classSHA256.html#ad82f2925b612de315b289017e023a73b',1,'SHA256']]], diff --git a/search/all_2.js b/search/all_2.js index fdc91407..bfe4a2cb 100644 --- a/search/all_2.js +++ b/search/all_2.js @@ -15,7 +15,7 @@ var searchData= ['chaseleds',['ChaseLEDs',['../classChaseLEDs.html',1,'ChaseLEDs'],['../classChaseLEDs.html#ab6bb3da371d3730a6552e93a9b2eab78',1,'ChaseLEDs::ChaseLEDs()']]], ['checktag',['checkTag',['../classAuthenticatedCipher.html#a4bb33d194e2c7d30c4e5a713e59786ff',1,'AuthenticatedCipher::checkTag()'],['../classChaChaPoly.html#aeffb3e0df0b4da03f72f30251243d953',1,'ChaChaPoly::checkTag()'],['../classEAXCommon.html#a72c403f52cefab57566bc5f634c1b963',1,'EAXCommon::checkTag()'],['../classGCMCommon.html#a70229be2fe2274c4109fe7511481075a',1,'GCMCommon::checkTag()']]], ['cipher',['Cipher',['../classCipher.html',1,'Cipher'],['../classCipher.html#a6a61077eca3ccd5900f92ceac58fb09c',1,'Cipher::Cipher()']]], - ['clear',['clear',['../classBitmap.html#a839dc8fab05a5ebf7a6b2e61436b2fa1',1,'Bitmap::clear()'],['../classAESCommon.html#a83e43f7d07e31d90fd7b768a93ecfce6',1,'AESCommon::clear()'],['../classBLAKE2b.html#a21623759bd381285ebf7e75a00c9c8a9',1,'BLAKE2b::clear()'],['../classBLAKE2s.html#a0848885f52df51dc53949d32a206e72d',1,'BLAKE2s::clear()'],['../classBlockCipher.html#a6f27d46e9dfa7761d014d828ad5f955b',1,'BlockCipher::clear()'],['../classCBCCommon.html#a7befadfe7384e0e857a96a59bf3845e9',1,'CBCCommon::clear()'],['../classCFBCommon.html#a847d320b0fe7f329385f26511b42c40d',1,'CFBCommon::clear()'],['../classChaCha.html#af533905f679066c41f4d6cd76bddb4cb',1,'ChaCha::clear()'],['../classChaChaPoly.html#a2d7fc3fd05a0b6c7c9c21fff6e939c9a',1,'ChaChaPoly::clear()'],['../classCipher.html#a4b7c3965646441a70d9ab934a7c92ab1',1,'Cipher::clear()'],['../classCTRCommon.html#ac0d6381c02fe2a8a017ad66d006a6ef2',1,'CTRCommon::clear()'],['../classEAXCommon.html#afa88b0f589e09103e9c69ace081db0af',1,'EAXCommon::clear()'],['../classGCMCommon.html#a06868ebd67a571aa68d88d5d072cece9',1,'GCMCommon::clear()'],['../classGHASH.html#a4b1ee789debf56f7f24807960ef0556e',1,'GHASH::clear()'],['../classHash.html#a4a959469433cd9348ab7f3ac6228bb34',1,'Hash::clear()'],['../classKeccakCore.html#aeff1df56e4a3103c99c1fe4307e60c66',1,'KeccakCore::clear()'],['../classOFBCommon.html#a55bf2396beb91c457bfc4c20ef5c8123',1,'OFBCommon::clear()'],['../classPoly1305.html#ae3f3392b9a2bd0f3472e7e50dd7e21dd',1,'Poly1305::clear()'],['../classSHA256.html#add0d1649d533b27005ccd8508398c689',1,'SHA256::clear()'],['../classSHA3__256.html#a531467f995ef6fc901ad8c2b5776a8d1',1,'SHA3_256::clear()'],['../classSHA3__512.html#acfbc5e9b4d394f011d5132a2b156d260',1,'SHA3_512::clear()'],['../classSHA512.html#a0a9104dce5f099aeba216e5fbcb1ee1a',1,'SHA512::clear()'],['../classSpeck.html#aa3866273282addabb9d3703c41fdc95f',1,'Speck::clear()'],['../classSpeckLowMemory.html#a5c4fcd9a8ac0d2cf9dd11ce678146d99',1,'SpeckLowMemory::clear()']]], + ['clear',['clear',['../classBitmap.html#a839dc8fab05a5ebf7a6b2e61436b2fa1',1,'Bitmap::clear()'],['../classAESCommon.html#a83e43f7d07e31d90fd7b768a93ecfce6',1,'AESCommon::clear()'],['../classBLAKE2b.html#a21623759bd381285ebf7e75a00c9c8a9',1,'BLAKE2b::clear()'],['../classBLAKE2s.html#a0848885f52df51dc53949d32a206e72d',1,'BLAKE2s::clear()'],['../classBlockCipher.html#a6f27d46e9dfa7761d014d828ad5f955b',1,'BlockCipher::clear()'],['../classCBCCommon.html#a7befadfe7384e0e857a96a59bf3845e9',1,'CBCCommon::clear()'],['../classCFBCommon.html#a847d320b0fe7f329385f26511b42c40d',1,'CFBCommon::clear()'],['../classChaCha.html#af533905f679066c41f4d6cd76bddb4cb',1,'ChaCha::clear()'],['../classChaChaPoly.html#a2d7fc3fd05a0b6c7c9c21fff6e939c9a',1,'ChaChaPoly::clear()'],['../classCipher.html#a4b7c3965646441a70d9ab934a7c92ab1',1,'Cipher::clear()'],['../classCTRCommon.html#ac0d6381c02fe2a8a017ad66d006a6ef2',1,'CTRCommon::clear()'],['../classEAXCommon.html#afa88b0f589e09103e9c69ace081db0af',1,'EAXCommon::clear()'],['../classGCMCommon.html#a06868ebd67a571aa68d88d5d072cece9',1,'GCMCommon::clear()'],['../classGHASH.html#a4b1ee789debf56f7f24807960ef0556e',1,'GHASH::clear()'],['../classHash.html#a4a959469433cd9348ab7f3ac6228bb34',1,'Hash::clear()'],['../classKeccakCore.html#aeff1df56e4a3103c99c1fe4307e60c66',1,'KeccakCore::clear()'],['../classOFBCommon.html#a55bf2396beb91c457bfc4c20ef5c8123',1,'OFBCommon::clear()'],['../classOMAC.html#a072715dbda39dc9c360cfcaab31d6aa7',1,'OMAC::clear()'],['../classPoly1305.html#ae3f3392b9a2bd0f3472e7e50dd7e21dd',1,'Poly1305::clear()'],['../classSHA256.html#add0d1649d533b27005ccd8508398c689',1,'SHA256::clear()'],['../classSHA3__256.html#a531467f995ef6fc901ad8c2b5776a8d1',1,'SHA3_256::clear()'],['../classSHA3__512.html#acfbc5e9b4d394f011d5132a2b156d260',1,'SHA3_512::clear()'],['../classSHA512.html#a0a9104dce5f099aeba216e5fbcb1ee1a',1,'SHA512::clear()'],['../classSpeck.html#aa3866273282addabb9d3703c41fdc95f',1,'Speck::clear()'],['../classSpeckSmall.html#aa93d9f0b5153425dc04e8fb8faff7513',1,'SpeckSmall::clear()'],['../classSpeckTiny.html#a303ecc2639459e47c6eeb21991d52ccf',1,'SpeckTiny::clear()']]], ['color',['Color',['../classBitmap.html#a88d386944a7017aa776a177b10d8b2ba',1,'Bitmap']]], ['command',['command',['../classIRreceiver.html#a4b021592a2b089dc2f1e138a38506fda',1,'IRreceiver']]], ['computetag',['computeTag',['../classAuthenticatedCipher.html#a73fa4306053ed457e5c533b3127391c9',1,'AuthenticatedCipher::computeTag()'],['../classChaChaPoly.html#a92d850ad7027829e4072c43bd5028f95',1,'ChaChaPoly::computeTag()'],['../classEAXCommon.html#ab5a61bba48561d6e7e6b8bafc51d91e3',1,'EAXCommon::computeTag()'],['../classGCMCommon.html#a444634bd4469bb5d404ac882d1d8fdf4',1,'GCMCommon::computeTag()']]], diff --git a/search/all_3.js b/search/all_3.js index b87992c0..498ad070 100644 --- a/search/all_3.js +++ b/search/all_3.js @@ -3,9 +3,11 @@ var searchData= ['data',['data',['../classBitmap.html#a5eeed27c176eb6e4a2c39ea83444e27d',1,'Bitmap::data()'],['../classBitmap.html#a20fea2a946545aa3b5edd78245149e5f',1,'Bitmap::data() const ']]], ['day',['day',['../structRTCDate.html#a2d68ff3fb90240df522b41222362704c',1,'RTCDate::day()'],['../structRTCAlarm.html#a9cbc0c2bd8cee02917539af77e845fc4',1,'RTCAlarm::day()']]], ['dayofweek',['dayOfWeek',['../classRTC.html#a525a9c1dad89613708f47a683eb316aa',1,'RTC::dayOfWeek(const RTCDate *date)'],['../classRTC.html#ab2ca0cbee608ec32d3d6e04d40298f11',1,'RTC::DayOfWeek()']]], + ['dbl',['dbl',['../classGF128.html#aef22f6b7be5937f60ed2b7bcf831e52d',1,'GF128']]], + ['dbleax',['dblEAX',['../classGF128.html#a56000a4cd7d436de42360e9d43eecde4',1,'GF128']]], ['decrement',['DECREMENT',['../classRTC.html#a05b1bd1479afc80682abdd4f3e58dc6f',1,'RTC']]], ['decrypt',['decrypt',['../classCBCCommon.html#ab46a2625cae9a654c708e1f31a0e22b6',1,'CBCCommon::decrypt()'],['../classCFBCommon.html#aaaa3d61c5743e30e355207c193c0b0ef',1,'CFBCommon::decrypt()'],['../classChaCha.html#a1f54b2b51b59428010f81a6c4dc4e42c',1,'ChaCha::decrypt()'],['../classChaChaPoly.html#a42f556f202b1166486434ee15b6d95a0',1,'ChaChaPoly::decrypt()'],['../classCipher.html#ac6099d1a0d7f2ff67b0e4ccb4a17eb08',1,'Cipher::decrypt()'],['../classCTRCommon.html#a0943387cf1124258389702e0690740fe',1,'CTRCommon::decrypt()'],['../classEAXCommon.html#a63ce8ae45db137ec9d447216b84245c2',1,'EAXCommon::decrypt()'],['../classGCMCommon.html#a60912d3ab5766aa68dc9b3111ac2c0d7',1,'GCMCommon::decrypt()'],['../classOFBCommon.html#aeb3636d7175b150e2bf16367e51c2e36',1,'OFBCommon::decrypt()']]], - ['decryptblock',['decryptBlock',['../classAESCommon.html#a95a806adf42f975765ff62907efdc639',1,'AESCommon::decryptBlock()'],['../classBlockCipher.html#ac3ba2450222aa1ea804ae4881ab6440c',1,'BlockCipher::decryptBlock()'],['../classSpeck.html#ad8c040df1c52d2559da8fdb3963d28b4',1,'Speck::decryptBlock()'],['../classSpeckLowMemory.html#adf789790cf8ba15eb7025eea965215e9',1,'SpeckLowMemory::decryptBlock()']]], + ['decryptblock',['decryptBlock',['../classAESCommon.html#a95a806adf42f975765ff62907efdc639',1,'AESCommon::decryptBlock()'],['../classBlockCipher.html#ac3ba2450222aa1ea804ae4881ab6440c',1,'BlockCipher::decryptBlock()'],['../classSpeck.html#ad8c040df1c52d2559da8fdb3963d28b4',1,'Speck::decryptBlock()'],['../classSpeckSmall.html#acced022717603980ecca21b3f953bf51',1,'SpeckSmall::decryptBlock()'],['../classSpeckTiny.html#a19e54aef7d1b3ef92e8140dd9c308c3c',1,'SpeckTiny::decryptBlock()']]], ['defaultfield',['defaultField',['../classForm.html#aba75b59f68b31dd77dbbac9ab5c3124b',1,'Form']]], ['derivepublickey',['derivePublicKey',['../classEd25519.html#ab62bac52ed07f77f76f3ff0fccd71cb2',1,'Ed25519']]], ['destroy',['destroy',['../classRNGClass.html#a9901367d86f2303a59bbc12fe91cad00',1,'RNGClass']]], diff --git a/search/all_4.js b/search/all_4.js index 317c330f..f55a3b8a 100644 --- a/search/all_4.js +++ b/search/all_4.js @@ -11,7 +11,7 @@ var searchData= ['enabletimer1',['enableTimer1',['../classDMD.html#a4c3b04b384f3d656a9b59690836775e2',1,'DMD']]], ['enabletimer2',['enableTimer2',['../classDMD.html#a5469775db7fafebca2cdbc6a6372fb97',1,'DMD']]], ['encrypt',['encrypt',['../classCBCCommon.html#a41d2f655a7df13cfcd009b2882e13147',1,'CBCCommon::encrypt()'],['../classCFBCommon.html#a57af3692389bed300d3cfdf351351c51',1,'CFBCommon::encrypt()'],['../classChaCha.html#acd4fff140b8871c233d9a31abf753ed8',1,'ChaCha::encrypt()'],['../classChaChaPoly.html#a7df4acd04f459ecf9d3b24317bde94a3',1,'ChaChaPoly::encrypt()'],['../classCipher.html#ad2832bd61039d61560e34ea3382ca562',1,'Cipher::encrypt()'],['../classCTRCommon.html#a201bda584d111552ce8ec09fac759963',1,'CTRCommon::encrypt()'],['../classEAXCommon.html#aad2c563f749535f539b8efbd74b09099',1,'EAXCommon::encrypt()'],['../classGCMCommon.html#a01ac69afe3d9fc4d72b2ea5dc242e55c',1,'GCMCommon::encrypt()'],['../classOFBCommon.html#a984d81a460e0799895b19dc48c3b5cf8',1,'OFBCommon::encrypt()']]], - ['encryptblock',['encryptBlock',['../classAESCommon.html#a2d95f6159abfcd92b5841f9018e44296',1,'AESCommon::encryptBlock()'],['../classBlockCipher.html#aed0788b25f6bb2f1bd47d5a5f0c5db33',1,'BlockCipher::encryptBlock()'],['../classSpeck.html#af6b8b91929e4b5b2023400688c9437f9',1,'Speck::encryptBlock()'],['../classSpeckLowMemory.html#ad74f9cec21584184511f6d731b8ad5cf',1,'SpeckLowMemory::encryptBlock()']]], + ['encryptblock',['encryptBlock',['../classAESCommon.html#a2d95f6159abfcd92b5841f9018e44296',1,'AESCommon::encryptBlock()'],['../classBlockCipher.html#aed0788b25f6bb2f1bd47d5a5f0c5db33',1,'BlockCipher::encryptBlock()'],['../classSpeck.html#af6b8b91929e4b5b2023400688c9437f9',1,'Speck::encryptBlock()'],['../classSpeckTiny.html#a5dd2cf40dc48addb6a393e78a58a07c0',1,'SpeckTiny::encryptBlock()']]], ['endwrite',['endWrite',['../classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41',1,'I2CMaster::endWrite()'],['../classSoftI2C.html#aa12ae82813598b2e9ea70463c23c5bf3',1,'SoftI2C::endWrite()']]], ['enterfield',['enterField',['../classBoolField.html#ab3f1e610b52caed7e41016f6ae3d7d09',1,'BoolField::enterField()'],['../classField.html#aa032bbeacb405c56546cb56fbbee94f5',1,'Field::enterField()'],['../classIntField.html#a51d9127b660e8dd7f87718acd230202a',1,'IntField::enterField()'],['../classListField.html#a191b79b460e45cf48e04b04eface2888',1,'ListField::enterField()'],['../classTextField.html#aa78f1354f9240b64fabd6f996e312f32',1,'TextField::enterField()'],['../classTimeField.html#ae914d6b870283a334d2d669460f7646b',1,'TimeField::enterField()']]], ['eval',['eval',['../classCurve25519.html#a2e4b7dd83a019b32c76584c99bfda21a',1,'Curve25519']]], diff --git a/search/all_5.js b/search/all_5.js index b5312a90..4e5ff3cd 100644 --- a/search/all_5.js +++ b/search/all_5.js @@ -3,7 +3,7 @@ var searchData= ['falselabel',['falseLabel',['../classBoolField.html#a59ad7a8a33290bda0d9fbb3df4f09b01',1,'BoolField']]], ['field',['Field',['../classField.html',1,'Field'],['../classField.html#ac4ea0d104376233c3f0bfc080ec8564e',1,'Field::Field(const String &label)'],['../classField.html#a7e2bdb203ddfd9219696f263c1731fe7',1,'Field::Field(Form &form, const String &label)']]], ['fill',['fill',['../classBitmap.html#a99da820f9280aace6b512801d5a5e2b2',1,'Bitmap::fill(int x, int y, int width, int height, Color color)'],['../classBitmap.html#ac661adab340858b541a2fe44e6303f56',1,'Bitmap::fill(int x, int y, int width, int height, Bitmap::ProgMem pattern, Color color=White)']]], - ['finalize',['finalize',['../classBLAKE2b.html#a0cd8146b7868bd0f4c24a3856f106d17',1,'BLAKE2b::finalize()'],['../classBLAKE2s.html#a751a3d772cbe1cd1dad83dbd09853b1b',1,'BLAKE2s::finalize()'],['../classGHASH.html#ab221298ca69c9612bfbfd3dedcb28307',1,'GHASH::finalize()'],['../classHash.html#a09b3ccec22763fc86b1415695862977c',1,'Hash::finalize()'],['../classPoly1305.html#aab3fa6c5f6fa7d9ca6c82bead38f499c',1,'Poly1305::finalize()'],['../classSHA256.html#a695157bcdf5495ba892ebac309f3abd6',1,'SHA256::finalize()'],['../classSHA3__256.html#a8fe7cad1f83bd1bae1a0d521324247a1',1,'SHA3_256::finalize()'],['../classSHA3__512.html#ac0227aafb5f047bb50f0bd84df0b4b5b',1,'SHA3_512::finalize()'],['../classSHA512.html#afc136ad0e77de527b031db3fb8b32464',1,'SHA512::finalize()']]], + ['finalize',['finalize',['../classBLAKE2b.html#a0cd8146b7868bd0f4c24a3856f106d17',1,'BLAKE2b::finalize()'],['../classBLAKE2s.html#a751a3d772cbe1cd1dad83dbd09853b1b',1,'BLAKE2s::finalize()'],['../classGHASH.html#ab221298ca69c9612bfbfd3dedcb28307',1,'GHASH::finalize()'],['../classHash.html#a09b3ccec22763fc86b1415695862977c',1,'Hash::finalize()'],['../classOMAC.html#ae4ccdaee764df779f7ae0c7433078b3e',1,'OMAC::finalize()'],['../classPoly1305.html#aab3fa6c5f6fa7d9ca6c82bead38f499c',1,'Poly1305::finalize()'],['../classSHA256.html#a695157bcdf5495ba892ebac309f3abd6',1,'SHA256::finalize()'],['../classSHA3__256.html#a8fe7cad1f83bd1bae1a0d521324247a1',1,'SHA3_256::finalize()'],['../classSHA3__512.html#ac0227aafb5f047bb50f0bd84df0b4b5b',1,'SHA3_512::finalize()'],['../classSHA512.html#afc136ad0e77de527b031db3fb8b32464',1,'SHA512::finalize()']]], ['finalizehmac',['finalizeHMAC',['../classBLAKE2b.html#a29fafbba26e3c1d896b4d4c428f7d52a',1,'BLAKE2b::finalizeHMAC()'],['../classBLAKE2s.html#a3f910f3bd48cc4a9c5330c31bcda31fc',1,'BLAKE2s::finalizeHMAC()'],['../classHash.html#aab42fa5420cc0bda4321a3d3866cfd06',1,'Hash::finalizeHMAC()'],['../classSHA256.html#a28bc2510c5bdaf210a012f9f21a753cd',1,'SHA256::finalizeHMAC()'],['../classSHA3__256.html#a001215fa1b7d2c30717b4b5b1618d68c',1,'SHA3_256::finalizeHMAC()'],['../classSHA3__512.html#a25c9d2da26d01d46ba6b72c8a7905ea0',1,'SHA3_512::finalizeHMAC()'],['../classSHA512.html#a1fe9533f0d3dfdb426eb3dc4bdc31904',1,'SHA512::finalizeHMAC()']]], ['firedalarm',['firedAlarm',['../classDS3231RTC.html#a6a5b3717ff65528de566c021eb821b94',1,'DS3231RTC::firedAlarm()'],['../classDS3232RTC.html#a79649f100a4562b9c1ba7c69e85cbca3',1,'DS3232RTC::firedAlarm()']]], ['flags',['flags',['../structRTCAlarm.html#a0f2ef7363cb60a26642d5295b77ca19e',1,'RTCAlarm']]], diff --git a/search/all_6.js b/search/all_6.js index 953e5e28..c744a66b 100644 --- a/search/all_6.js +++ b/search/all_6.js @@ -5,5 +5,6 @@ var searchData= ['gcmcommon',['GCMCommon',['../classGCMCommon.html',1,'GCMCommon'],['../classGCMCommon.html#a1b05ff393e8c20db30cb991e875aab19',1,'GCMCommon::GCMCommon()']]], ['generateprivatekey',['generatePrivateKey',['../classEd25519.html#ab8be5115ac5adc8a556dbac7d7e90d2e',1,'Ed25519']]], ['getbutton',['getButton',['../classLCD.html#ac1e80e2603bd1cf0276c36092c416292',1,'LCD']]], + ['gf128',['GF128',['../classGF128.html',1,'']]], ['ghash',['GHASH',['../classGHASH.html',1,'GHASH'],['../classGHASH.html#a3a1abd0f641bccd9b4aa1f40beb8dca3',1,'GHASH::GHASH()']]] ]; diff --git a/search/all_8.js b/search/all_8.js index c63f73d1..fd3f5cf8 100644 --- a/search/all_8.js +++ b/search/all_8.js @@ -2,6 +2,8 @@ var searchData= [ ['i2cmaster',['I2CMaster',['../classI2CMaster.html',1,'']]], ['increment',['INCREMENT',['../classRTC.html#aacbe3ebbf893685950b05327c11d5c37',1,'RTC']]], + ['initfirst',['initFirst',['../classOMAC.html#a0274138725ddf6240c030574bae3975c',1,'OMAC']]], + ['initnext',['initNext',['../classOMAC.html#ad496c7d2de4f22fd4192345003e75ee5',1,'OMAC']]], ['intfield',['IntField',['../classIntField.html',1,'IntField'],['../classIntField.html#a9df274c4100ed37d2d78738f09fc53b6',1,'IntField::IntField(const String &label)'],['../classIntField.html#a10c9c958bcde276698f1f1f9bff949dd',1,'IntField::IntField(Form &form, const String &label, int minValue, int maxValue, int stepValue, int value)'],['../classIntField.html#a2b99fa19be6a0ed01ddc4939352b372e',1,'IntField::IntField(Form &form, const String &label, int minValue, int maxValue, int stepValue, int value, const String &suffix)']]], ['invert',['invert',['../classBitmap.html#a6d85556bcc9fac91d33f0f6f7a6430dd',1,'Bitmap']]], ['ir_2ddumpir_2edox',['ir-dumpir.dox',['../ir-dumpir_8dox.html',1,'']]], diff --git a/search/all_9.js b/search/all_9.js index e06cc452..5e018a60 100644 --- a/search/all_9.js +++ b/search/all_9.js @@ -1,5 +1,5 @@ var searchData= [ ['keccakcore',['KeccakCore',['../classKeccakCore.html',1,'KeccakCore'],['../classKeccakCore.html#a850c8e85bdb6b347411239716535d9c9',1,'KeccakCore::KeccakCore()']]], - ['keysize',['keySize',['../classAES128.html#aa871832a156f0ea61b964e489670ae9d',1,'AES128::keySize()'],['../classAES192.html#ade28843e51e262b30eb55791c83fd791',1,'AES192::keySize()'],['../classAES256.html#af8ed6412bae6fc78274f60344899366a',1,'AES256::keySize()'],['../classBlockCipher.html#afde6004a859e015d877eab3c37042a0f',1,'BlockCipher::keySize()'],['../classCBCCommon.html#adb7daacfe2a4fca3d13b62b75372fe4e',1,'CBCCommon::keySize()'],['../classCFBCommon.html#a82899da983bc70bc8152ee67f424552e',1,'CFBCommon::keySize()'],['../classChaCha.html#af286083291fab2bd36dc7ad1f54d5cd7',1,'ChaCha::keySize()'],['../classChaChaPoly.html#a666760e68cb53f28ba0a8dc09039c0fb',1,'ChaChaPoly::keySize()'],['../classCipher.html#a4cea432ea0278c865441f17cbb88b1ab',1,'Cipher::keySize()'],['../classCTRCommon.html#a29ce8e13a302350397fc6790a686bea2',1,'CTRCommon::keySize()'],['../classEAXCommon.html#a027956913eecfa0bc760f20f3b62df29',1,'EAXCommon::keySize()'],['../classGCMCommon.html#a134ba35e740a18bee3c45502b4149eae',1,'GCMCommon::keySize()'],['../classOFBCommon.html#a76ea9f9ea9dd137778338813e534a8ce',1,'OFBCommon::keySize()'],['../classSpeck.html#a061e43c1363178cda088c3f46e07d87b',1,'Speck::keySize()'],['../classSpeckLowMemory.html#ab7cd4c7d2acb5b3dfa22ce08d659f279',1,'SpeckLowMemory::keySize()']]] + ['keysize',['keySize',['../classAES128.html#aa871832a156f0ea61b964e489670ae9d',1,'AES128::keySize()'],['../classAES192.html#ade28843e51e262b30eb55791c83fd791',1,'AES192::keySize()'],['../classAES256.html#af8ed6412bae6fc78274f60344899366a',1,'AES256::keySize()'],['../classBlockCipher.html#afde6004a859e015d877eab3c37042a0f',1,'BlockCipher::keySize()'],['../classCBCCommon.html#adb7daacfe2a4fca3d13b62b75372fe4e',1,'CBCCommon::keySize()'],['../classCFBCommon.html#a82899da983bc70bc8152ee67f424552e',1,'CFBCommon::keySize()'],['../classChaCha.html#af286083291fab2bd36dc7ad1f54d5cd7',1,'ChaCha::keySize()'],['../classChaChaPoly.html#a666760e68cb53f28ba0a8dc09039c0fb',1,'ChaChaPoly::keySize()'],['../classCipher.html#a4cea432ea0278c865441f17cbb88b1ab',1,'Cipher::keySize()'],['../classCTRCommon.html#a29ce8e13a302350397fc6790a686bea2',1,'CTRCommon::keySize()'],['../classEAXCommon.html#a027956913eecfa0bc760f20f3b62df29',1,'EAXCommon::keySize()'],['../classGCMCommon.html#a134ba35e740a18bee3c45502b4149eae',1,'GCMCommon::keySize()'],['../classOFBCommon.html#a76ea9f9ea9dd137778338813e534a8ce',1,'OFBCommon::keySize()'],['../classSpeck.html#a061e43c1363178cda088c3f46e07d87b',1,'Speck::keySize()'],['../classSpeckTiny.html#a5587909ba48776b01bbd40b339b1262e',1,'SpeckTiny::keySize()']]] ]; diff --git a/search/all_a.js b/search/all_a.js index 151e1cdf..e96e486d 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/all_b.js b/search/all_b.js index 9c3de5c2..6a32d399 100644 --- a/search/all_b.js +++ b/search/all_b.js @@ -8,6 +8,7 @@ var searchData= ['minute',['minute',['../structRTCTime.html#acf2161ca037080dc4b767e636ad8db84',1,'RTCTime::minute()'],['../structRTCAlarm.html#ad9a75ceb4b4b3474baa66dd5466e62fe',1,'RTCAlarm::minute()']]], ['minvalue',['minValue',['../classIntField.html#af3dab3f2b46d29136d7a93ce46b0b8fb',1,'IntField']]], ['month',['month',['../structRTCDate.html#a6e6196059b36186041a5312400ea9202',1,'RTCDate']]], - ['mul',['mul',['../classBigNumberUtil.html#a1c2c5484f2bf440ae292fd3dfd2d594f',1,'BigNumberUtil']]], - ['mul_5fp',['mul_P',['../classBigNumberUtil.html#aacdee1806a239eb9e58753ef1ddb964a',1,'BigNumberUtil']]] + ['mul',['mul',['../classBigNumberUtil.html#a1c2c5484f2bf440ae292fd3dfd2d594f',1,'BigNumberUtil::mul()'],['../classGF128.html#a7d9a341a1715d37d25feba21627bc3ab',1,'GF128::mul()']]], + ['mul_5fp',['mul_P',['../classBigNumberUtil.html#aacdee1806a239eb9e58753ef1ddb964a',1,'BigNumberUtil']]], + ['mulinit',['mulInit',['../classGF128.html#a43adbd72619e4f97ce427a60e7c0a248',1,'GF128']]] ]; diff --git a/search/all_d.js b/search/all_d.js index ba80b033..ec10b51a 100644 --- a/search/all_d.js +++ b/search/all_d.js @@ -3,6 +3,7 @@ var searchData= ['ofb',['OFB',['../classOFB.html',1,'OFB< T >'],['../classOFB.html#a0b71b5cbcf01254799cd5eb37074a8cb',1,'OFB::OFB()']]], ['ofbcommon',['OFBCommon',['../classOFBCommon.html',1,'OFBCommon'],['../classOFBCommon.html#a7f7e0cffcd7e2d7e06b7b1ae978a8f7d',1,'OFBCommon::OFBCommon()']]], ['offtime',['offTime',['../classBlinkLED.html#a74c640edf1a9f6e8bea1e139462908bc',1,'BlinkLED']]], + ['omac',['OMAC',['../classOMAC.html',1,'OMAC'],['../classOMAC.html#ae84365423cef3f769464489848942559',1,'OMAC::OMAC()']]], ['ontime',['onTime',['../classBlinkLED.html#a8475f78f41d1a2d5d719bec8cbbb3ebb',1,'BlinkLED']]], ['output',['output',['../classNoiseSource.html#a1af7449a5ae4a8acd34ac218c9eec6c1',1,'NoiseSource']]] ]; diff --git a/search/classes_10.js b/search/classes_10.js index 4217fff8..5917afb1 100644 --- a/search/classes_10.js +++ b/search/classes_10.js @@ -6,5 +6,6 @@ var searchData= ['sha512',['SHA512',['../classSHA512.html',1,'']]], ['softi2c',['SoftI2C',['../classSoftI2C.html',1,'']]], ['speck',['Speck',['../classSpeck.html',1,'']]], - ['specklowmemory',['SpeckLowMemory',['../classSpeckLowMemory.html',1,'']]] + ['specksmall',['SpeckSmall',['../classSpeckSmall.html',1,'']]], + ['specktiny',['SpeckTiny',['../classSpeckTiny.html',1,'']]] ]; diff --git a/search/classes_6.js b/search/classes_6.js index 6d8aa809..a107969d 100644 --- a/search/classes_6.js +++ b/search/classes_6.js @@ -2,5 +2,6 @@ var searchData= [ ['gcm',['GCM',['../classGCM.html',1,'']]], ['gcmcommon',['GCMCommon',['../classGCMCommon.html',1,'']]], + ['gf128',['GF128',['../classGF128.html',1,'']]], ['ghash',['GHASH',['../classGHASH.html',1,'']]] ]; diff --git a/search/classes_d.js b/search/classes_d.js index 8f9a8c0f..3717f751 100644 --- a/search/classes_d.js +++ b/search/classes_d.js @@ -1,5 +1,6 @@ var searchData= [ ['ofb',['OFB',['../classOFB.html',1,'']]], - ['ofbcommon',['OFBCommon',['../classOFBCommon.html',1,'']]] + ['ofbcommon',['OFBCommon',['../classOFBCommon.html',1,'']]], + ['omac',['OMAC',['../classOMAC.html',1,'']]] ]; diff --git a/search/functions_1.js b/search/functions_1.js index a3227b45..ff109574 100644 --- a/search/functions_1.js +++ b/search/functions_1.js @@ -7,8 +7,8 @@ var searchData= ['blake2b',['BLAKE2b',['../classBLAKE2b.html#a19b3b751809905a5587468f0d6c666ff',1,'BLAKE2b']]], ['blake2s',['BLAKE2s',['../classBLAKE2s.html#a7345f4e08c19d7a8c278282b46df21a2',1,'BLAKE2s']]], ['blinkled',['BlinkLED',['../classBlinkLED.html#afc33958651e7ce6dceb428ea654c2c2f',1,'BlinkLED']]], - ['blockcipher',['BlockCipher',['../classBlockCipher.html#adc3d7cba116cbea9ad017f4cded6fe2f',1,'BlockCipher']]], - ['blocksize',['blockSize',['../classAESCommon.html#ae26afdcc6d18e8888974acae16df1413',1,'AESCommon::blockSize()'],['../classBLAKE2b.html#abec1b2320c3afaed12a29cf081b95fe2',1,'BLAKE2b::blockSize()'],['../classBLAKE2s.html#a9b5403734c20a0591d72a98912e4a305',1,'BLAKE2s::blockSize()'],['../classBlockCipher.html#a7059a310487c128db034b0ce0ad425a0',1,'BlockCipher::blockSize()'],['../classHash.html#a4e4297812e3483410556830fe5d47bdf',1,'Hash::blockSize()'],['../classKeccakCore.html#a3742ed39151811b5d1c263c75ee5b20a',1,'KeccakCore::blockSize()'],['../classSHA256.html#a71bbd9064f9d6191d0647f867953a858',1,'SHA256::blockSize()'],['../classSHA3__256.html#a88a50ab6c2d4ad105cda2dd504d96e7c',1,'SHA3_256::blockSize()'],['../classSHA3__512.html#a4493a717bad8fa5cd35fe3aa36f25ab3',1,'SHA3_512::blockSize()'],['../classSHA512.html#acf8b9bcb6be91ee70acc3700a2ffa1a1',1,'SHA512::blockSize()'],['../classSpeck.html#a18a3b982a2cbc48befc8d498de08f188',1,'Speck::blockSize()'],['../classSpeckLowMemory.html#ae16cc24406ad4f93e499d1ed95453090',1,'SpeckLowMemory::blockSize()']]], + ['blockcipher',['blockCipher',['../classOMAC.html#abca82def496c6c6ab1ce5e5a958ec34a',1,'OMAC::blockCipher()'],['../classBlockCipher.html#adc3d7cba116cbea9ad017f4cded6fe2f',1,'BlockCipher::BlockCipher()']]], + ['blocksize',['blockSize',['../classAESCommon.html#ae26afdcc6d18e8888974acae16df1413',1,'AESCommon::blockSize()'],['../classBLAKE2b.html#abec1b2320c3afaed12a29cf081b95fe2',1,'BLAKE2b::blockSize()'],['../classBLAKE2s.html#a9b5403734c20a0591d72a98912e4a305',1,'BLAKE2s::blockSize()'],['../classBlockCipher.html#a7059a310487c128db034b0ce0ad425a0',1,'BlockCipher::blockSize()'],['../classHash.html#a4e4297812e3483410556830fe5d47bdf',1,'Hash::blockSize()'],['../classKeccakCore.html#a3742ed39151811b5d1c263c75ee5b20a',1,'KeccakCore::blockSize()'],['../classSHA256.html#a71bbd9064f9d6191d0647f867953a858',1,'SHA256::blockSize()'],['../classSHA3__256.html#a88a50ab6c2d4ad105cda2dd504d96e7c',1,'SHA3_256::blockSize()'],['../classSHA3__512.html#a4493a717bad8fa5cd35fe3aa36f25ab3',1,'SHA3_512::blockSize()'],['../classSHA512.html#acf8b9bcb6be91ee70acc3700a2ffa1a1',1,'SHA512::blockSize()'],['../classSpeck.html#a18a3b982a2cbc48befc8d498de08f188',1,'Speck::blockSize()'],['../classSpeckTiny.html#af8bbd1d1124fd1c4ef1aa167625376a9',1,'SpeckTiny::blockSize()']]], ['boolfield',['BoolField',['../classBoolField.html#a5d4382cdcdc989de0179d8f3f3a59998',1,'BoolField::BoolField(const String &label)'],['../classBoolField.html#a49aad212ed18f84baa105c24e86281d9',1,'BoolField::BoolField(Form &form, const String &label, const String &trueLabel, const String &falseLabel, bool value)']]], ['bytecount',['byteCount',['../classDS1307RTC.html#a93c25269a9b78ab3331354db26672248',1,'DS1307RTC::byteCount()'],['../classDS3232RTC.html#a1319fe936dcb7e9d6bdf200b77a94f8e',1,'DS3232RTC::byteCount()'],['../classRTC.html#acfdebfb449710e44e11f9a3675e14fd8',1,'RTC::byteCount()']]] ]; diff --git a/search/functions_10.js b/search/functions_10.js index 4587d8dd..af776b47 100644 --- a/search/functions_10.js +++ b/search/functions_10.js @@ -8,7 +8,7 @@ var searchData= ['setautosavetime',['setAutoSaveTime',['../classRNGClass.html#a5848e87a5f2f0302c88b0377f0e3366d',1,'RNGClass']]], ['setbacklightpin',['setBacklightPin',['../classLCD.html#a0b9b3b954290e7a3d94cdc829582b0a8',1,'LCD']]], ['setblinkrate',['setBlinkRate',['../classBlinkLED.html#a47f95624881063aa91c0066ed2c92258',1,'BlinkLED']]], - ['setblockcipher',['setBlockCipher',['../classCBCCommon.html#a0b7631244b0c2c954cfdb50eb32f7db1',1,'CBCCommon::setBlockCipher()'],['../classCFBCommon.html#a9161530f456efacb64f5008fdb1a460c',1,'CFBCommon::setBlockCipher()'],['../classCTRCommon.html#a6c409c4ec1f99e0cb751196d891dc228',1,'CTRCommon::setBlockCipher()'],['../classEAXCommon.html#a7db44040163b33f818cfaf47185251ca',1,'EAXCommon::setBlockCipher()'],['../classGCMCommon.html#a7abd3044862f8634f3b176aafa779ba2',1,'GCMCommon::setBlockCipher()'],['../classOFBCommon.html#a0053e2566a88859effffacbf1e4ade04',1,'OFBCommon::setBlockCipher()']]], + ['setblockcipher',['setBlockCipher',['../classCBCCommon.html#a0b7631244b0c2c954cfdb50eb32f7db1',1,'CBCCommon::setBlockCipher()'],['../classCFBCommon.html#a9161530f456efacb64f5008fdb1a460c',1,'CFBCommon::setBlockCipher()'],['../classCTRCommon.html#a6c409c4ec1f99e0cb751196d891dc228',1,'CTRCommon::setBlockCipher()'],['../classEAXCommon.html#a7db44040163b33f818cfaf47185251ca',1,'EAXCommon::setBlockCipher()'],['../classGCMCommon.html#a7abd3044862f8634f3b176aafa779ba2',1,'GCMCommon::setBlockCipher()'],['../classOFBCommon.html#a0053e2566a88859effffacbf1e4ade04',1,'OFBCommon::setBlockCipher()'],['../classOMAC.html#a8ae86bc629cca60cebb995d092ba06b4',1,'OMAC::setBlockCipher()']]], ['setcapacity',['setCapacity',['../classKeccakCore.html#ab3c1905f2002e49aca085d6f0b5546f7',1,'KeccakCore']]], ['setcounter',['setCounter',['../classChaCha.html#acab9109b7189ea88d9e5417a3a209eac',1,'ChaCha']]], ['setcountersize',['setCounterSize',['../classCTRCommon.html#ae2bc6b33a864412598b426320d853337',1,'CTRCommon']]], @@ -20,7 +20,7 @@ var searchData= ['setholdtime',['setHoldTime',['../classCharlieplex.html#a8502f4c752faba37023ced587695f6a4',1,'Charlieplex']]], ['setitems',['setItems',['../classListField.html#ae6709bce9355451b651893691456704e',1,'ListField']]], ['setiv',['setIV',['../classCBCCommon.html#ac7a586217835055b3a354bb932db160c',1,'CBCCommon::setIV()'],['../classCFBCommon.html#a597040eb7df40adbbef94b4c3975cd80',1,'CFBCommon::setIV()'],['../classChaCha.html#a734f3246b1e6810c63637b8cda26b259',1,'ChaCha::setIV()'],['../classChaChaPoly.html#a308056b17b3a4a496e9612ae19a2fd6f',1,'ChaChaPoly::setIV()'],['../classCipher.html#a3777acd8ff776a4e945bb7c9f2d044d9',1,'Cipher::setIV()'],['../classCTRCommon.html#aad289af3eb013cb3ffda6d7e8e8b3d04',1,'CTRCommon::setIV()'],['../classEAXCommon.html#a33a5da1f210f01c3622fbf27208f3d45',1,'EAXCommon::setIV()'],['../classGCMCommon.html#a2545135fe42c832e40e057b603824524',1,'GCMCommon::setIV()'],['../classOFBCommon.html#a4a35364cf30d78f1968cc00803686caf',1,'OFBCommon::setIV()']]], - ['setkey',['setKey',['../classAES128.html#a42d7548eb5084a2c3e2d5aa5f6f98ba4',1,'AES128::setKey()'],['../classAES192.html#a4ab37cff19fb05ceef1533ebc5e37cde',1,'AES192::setKey()'],['../classAES256.html#a6af085d2d6a730ff1e025f982121bbda',1,'AES256::setKey()'],['../classBlockCipher.html#a9a05307664469777592799c8f77397c4',1,'BlockCipher::setKey()'],['../classCBCCommon.html#add75ea4342a190e560cee26a8e9efc37',1,'CBCCommon::setKey()'],['../classCFBCommon.html#a45b9be25fb96f0e3ca5211b064e2baea',1,'CFBCommon::setKey()'],['../classChaCha.html#a6b2bdffbd3705e388bb458edb2f40c90',1,'ChaCha::setKey()'],['../classChaChaPoly.html#ae300892647dd92cbce711b834aa20c09',1,'ChaChaPoly::setKey()'],['../classCipher.html#a0dfe133bda81dfa680b668f5908ccbe5',1,'Cipher::setKey()'],['../classCTRCommon.html#a79da937dc2c444a174176beab33c055a',1,'CTRCommon::setKey()'],['../classEAXCommon.html#af5be5115c119610abb351028263d28de',1,'EAXCommon::setKey()'],['../classGCMCommon.html#a397c5dddde828c59eb63367385aec562',1,'GCMCommon::setKey()'],['../classOFBCommon.html#ac3a98e81d95ebc6c883baef5f4cfbefb',1,'OFBCommon::setKey()'],['../classSpeck.html#a7a07fc025bd25d832e9899333b5dabef',1,'Speck::setKey()'],['../classSpeckLowMemory.html#a0fda570e117f2b7977aaee3d1e93584b',1,'SpeckLowMemory::setKey()']]], + ['setkey',['setKey',['../classAES128.html#a42d7548eb5084a2c3e2d5aa5f6f98ba4',1,'AES128::setKey()'],['../classAES192.html#a4ab37cff19fb05ceef1533ebc5e37cde',1,'AES192::setKey()'],['../classAES256.html#a6af085d2d6a730ff1e025f982121bbda',1,'AES256::setKey()'],['../classBlockCipher.html#a9a05307664469777592799c8f77397c4',1,'BlockCipher::setKey()'],['../classCBCCommon.html#add75ea4342a190e560cee26a8e9efc37',1,'CBCCommon::setKey()'],['../classCFBCommon.html#a45b9be25fb96f0e3ca5211b064e2baea',1,'CFBCommon::setKey()'],['../classChaCha.html#a6b2bdffbd3705e388bb458edb2f40c90',1,'ChaCha::setKey()'],['../classChaChaPoly.html#ae300892647dd92cbce711b834aa20c09',1,'ChaChaPoly::setKey()'],['../classCipher.html#a0dfe133bda81dfa680b668f5908ccbe5',1,'Cipher::setKey()'],['../classCTRCommon.html#a79da937dc2c444a174176beab33c055a',1,'CTRCommon::setKey()'],['../classEAXCommon.html#af5be5115c119610abb351028263d28de',1,'EAXCommon::setKey()'],['../classGCMCommon.html#a397c5dddde828c59eb63367385aec562',1,'GCMCommon::setKey()'],['../classOFBCommon.html#ac3a98e81d95ebc6c883baef5f4cfbefb',1,'OFBCommon::setKey()'],['../classSpeck.html#a7a07fc025bd25d832e9899333b5dabef',1,'Speck::setKey()'],['../classSpeckSmall.html#a3345df135f6530bad475d630ef6c1038',1,'SpeckSmall::setKey()'],['../classSpeckTiny.html#a05180c773b9d26d3b67ff569dc86fc2d',1,'SpeckTiny::setKey()']]], ['setlabel',['setLabel',['../classField.html#ad4ea63599d780c35b296cf2840b69f7b',1,'Field']]], ['setled',['setLed',['../classCharlieplex.html#ab103c9687a0890faf72e4da79e3de0a5',1,'Charlieplex']]], ['setloopcount',['setLoopCount',['../classMelody.html#a507097a2e8ff51a5e9157e3a320ae35b',1,'Melody']]], @@ -51,7 +51,8 @@ var searchData= ['sleepfor',['sleepFor',['../group__power__save.html#ga95c1666038493a7f95be6768882eebad',1,'sleepFor(SleepDuration duration, uint8_t mode): PowerSave.cpp'],['../group__power__save.html#ga95c1666038493a7f95be6768882eebad',1,'sleepFor(SleepDuration duration, uint8_t mode=0): PowerSave.cpp']]], ['softi2c',['SoftI2C',['../classSoftI2C.html#adb6e00ee3f930f1d32010a18feb5f6cc',1,'SoftI2C']]], ['speck',['Speck',['../classSpeck.html#a1f0ea433652d791317863de8a50a0580',1,'Speck']]], - ['specklowmemory',['SpeckLowMemory',['../classSpeckLowMemory.html#a200cb46d4f4044d691a60f4c19c6021c',1,'SpeckLowMemory']]], + ['specksmall',['SpeckSmall',['../classSpeckSmall.html#a0efa12c897f718a5a49cbd6f2fc6aca3',1,'SpeckSmall']]], + ['specktiny',['SpeckTiny',['../classSpeckTiny.html#a2ac351443979ea9da3521e79313cc580',1,'SpeckTiny']]], ['startread',['startRead',['../classI2CMaster.html#a4e5f1a1a4c2242699be5a35fc4872fde',1,'I2CMaster::startRead()'],['../classSoftI2C.html#aa0dafc067cfa374af75e060dca647ec3',1,'SoftI2C::startRead()']]], ['startwrite',['startWrite',['../classI2CMaster.html#a01960fc821cb25e4c88c26d2c6107e35',1,'I2CMaster::startWrite()'],['../classSoftI2C.html#aa8a3219f4e6ff52306cc3c219f37d8f9',1,'SoftI2C::startWrite()']]], ['state',['state',['../classBlinkLED.html#ab89b5b3435998ea6699d4bf94866e233',1,'BlinkLED']]], diff --git a/search/functions_12.js b/search/functions_12.js index c0a76517..74eb88d5 100644 --- a/search/functions_12.js +++ b/search/functions_12.js @@ -3,6 +3,6 @@ var searchData= ['unpackbe',['unpackBE',['../classBigNumberUtil.html#a63f9d7884eb36227d39e1b95e219d865',1,'BigNumberUtil']]], ['unpackle',['unpackLE',['../classBigNumberUtil.html#a25041f898c417c8dd63f30536287ed79',1,'BigNumberUtil']]], ['unusedpin',['unusedPin',['../group__power__save.html#ga6dbe8e20a70e83cf5b068177675ec792',1,'PowerSave.h']]], - ['update',['update',['../classBLAKE2b.html#a468e48c66ce1738e11c922d133135069',1,'BLAKE2b::update()'],['../classBLAKE2s.html#aa192da2fa044b03cccaf11e87fdf9911',1,'BLAKE2s::update()'],['../classGHASH.html#a235edb14c6ed1ec55ddda595816ef1c7',1,'GHASH::update()'],['../classHash.html#aec9761ee427d122e7450de8df200265c',1,'Hash::update()'],['../classKeccakCore.html#aaaa0355ccec0f469ac8eb577bdf853ed',1,'KeccakCore::update()'],['../classPoly1305.html#ae4e0b647ff93f501bd01459b1616557c',1,'Poly1305::update()'],['../classSHA256.html#a555bf8efb17afd4842d2e55a1f39f27b',1,'SHA256::update()'],['../classSHA3__256.html#a8356957ea403c5da326fc6899b91ea71',1,'SHA3_256::update()'],['../classSHA3__512.html#a0563e4c87150e6019671b4fe92fd63a4',1,'SHA3_512::update()'],['../classSHA512.html#a7d37a20d7ab431ab15d094f768b6a695',1,'SHA512::update()']]], + ['update',['update',['../classBLAKE2b.html#a468e48c66ce1738e11c922d133135069',1,'BLAKE2b::update()'],['../classBLAKE2s.html#aa192da2fa044b03cccaf11e87fdf9911',1,'BLAKE2s::update()'],['../classGHASH.html#a235edb14c6ed1ec55ddda595816ef1c7',1,'GHASH::update()'],['../classHash.html#aec9761ee427d122e7450de8df200265c',1,'Hash::update()'],['../classKeccakCore.html#aaaa0355ccec0f469ac8eb577bdf853ed',1,'KeccakCore::update()'],['../classOMAC.html#a6692d7f37dd097fdfdd2b198aa0d9cde',1,'OMAC::update()'],['../classPoly1305.html#ae4e0b647ff93f501bd01459b1616557c',1,'Poly1305::update()'],['../classSHA256.html#a555bf8efb17afd4842d2e55a1f39f27b',1,'SHA256::update()'],['../classSHA3__256.html#a8356957ea403c5da326fc6899b91ea71',1,'SHA3_256::update()'],['../classSHA3__512.html#a0563e4c87150e6019671b4fe92fd63a4',1,'SHA3_512::update()'],['../classSHA512.html#a7d37a20d7ab431ab15d094f768b6a695',1,'SHA512::update()']]], ['updatecursor',['updateCursor',['../classField.html#afc612378167be0e7f8a6f8395b3537bd',1,'Field']]] ]; diff --git a/search/functions_15.js b/search/functions_15.js index a0f354d8..a8031df1 100644 --- a/search/functions_15.js +++ b/search/functions_15.js @@ -20,6 +20,7 @@ var searchData= ['_7ekeccakcore',['~KeccakCore',['../classKeccakCore.html#a4579e3a9b24f1d615fa8d660c23e77a4',1,'KeccakCore']]], ['_7enoisesource',['~NoiseSource',['../classNoiseSource.html#a4eca1e894a5d719fb9bf4df34a791cdb',1,'NoiseSource']]], ['_7eofbcommon',['~OFBCommon',['../classOFBCommon.html#aae7435157e51bf977d3481e94e17ae01',1,'OFBCommon']]], + ['_7eomac',['~OMAC',['../classOMAC.html#a6bb2222c997608ec68b25831da965e8f',1,'OMAC']]], ['_7epoly1305',['~Poly1305',['../classPoly1305.html#ac021b5ebbc123fa4c0ee36330472c25d',1,'Poly1305']]], ['_7erngclass',['~RNGClass',['../classRNGClass.html#aef3ee2fb14a39caf650dc90a0226dd31',1,'RNGClass']]], ['_7esha256',['~SHA256',['../classSHA256.html#ad82f2925b612de315b289017e023a73b',1,'SHA256']]], diff --git a/search/functions_2.js b/search/functions_2.js index a080963a..e698364f 100644 --- a/search/functions_2.js +++ b/search/functions_2.js @@ -13,7 +13,7 @@ var searchData= ['chaseleds',['ChaseLEDs',['../classChaseLEDs.html#ab6bb3da371d3730a6552e93a9b2eab78',1,'ChaseLEDs']]], ['checktag',['checkTag',['../classAuthenticatedCipher.html#a4bb33d194e2c7d30c4e5a713e59786ff',1,'AuthenticatedCipher::checkTag()'],['../classChaChaPoly.html#aeffb3e0df0b4da03f72f30251243d953',1,'ChaChaPoly::checkTag()'],['../classEAXCommon.html#a72c403f52cefab57566bc5f634c1b963',1,'EAXCommon::checkTag()'],['../classGCMCommon.html#a70229be2fe2274c4109fe7511481075a',1,'GCMCommon::checkTag()']]], ['cipher',['Cipher',['../classCipher.html#a6a61077eca3ccd5900f92ceac58fb09c',1,'Cipher']]], - ['clear',['clear',['../classBitmap.html#a839dc8fab05a5ebf7a6b2e61436b2fa1',1,'Bitmap::clear()'],['../classAESCommon.html#a83e43f7d07e31d90fd7b768a93ecfce6',1,'AESCommon::clear()'],['../classBLAKE2b.html#a21623759bd381285ebf7e75a00c9c8a9',1,'BLAKE2b::clear()'],['../classBLAKE2s.html#a0848885f52df51dc53949d32a206e72d',1,'BLAKE2s::clear()'],['../classBlockCipher.html#a6f27d46e9dfa7761d014d828ad5f955b',1,'BlockCipher::clear()'],['../classCBCCommon.html#a7befadfe7384e0e857a96a59bf3845e9',1,'CBCCommon::clear()'],['../classCFBCommon.html#a847d320b0fe7f329385f26511b42c40d',1,'CFBCommon::clear()'],['../classChaCha.html#af533905f679066c41f4d6cd76bddb4cb',1,'ChaCha::clear()'],['../classChaChaPoly.html#a2d7fc3fd05a0b6c7c9c21fff6e939c9a',1,'ChaChaPoly::clear()'],['../classCipher.html#a4b7c3965646441a70d9ab934a7c92ab1',1,'Cipher::clear()'],['../classCTRCommon.html#ac0d6381c02fe2a8a017ad66d006a6ef2',1,'CTRCommon::clear()'],['../classEAXCommon.html#afa88b0f589e09103e9c69ace081db0af',1,'EAXCommon::clear()'],['../classGCMCommon.html#a06868ebd67a571aa68d88d5d072cece9',1,'GCMCommon::clear()'],['../classGHASH.html#a4b1ee789debf56f7f24807960ef0556e',1,'GHASH::clear()'],['../classHash.html#a4a959469433cd9348ab7f3ac6228bb34',1,'Hash::clear()'],['../classKeccakCore.html#aeff1df56e4a3103c99c1fe4307e60c66',1,'KeccakCore::clear()'],['../classOFBCommon.html#a55bf2396beb91c457bfc4c20ef5c8123',1,'OFBCommon::clear()'],['../classPoly1305.html#ae3f3392b9a2bd0f3472e7e50dd7e21dd',1,'Poly1305::clear()'],['../classSHA256.html#add0d1649d533b27005ccd8508398c689',1,'SHA256::clear()'],['../classSHA3__256.html#a531467f995ef6fc901ad8c2b5776a8d1',1,'SHA3_256::clear()'],['../classSHA3__512.html#acfbc5e9b4d394f011d5132a2b156d260',1,'SHA3_512::clear()'],['../classSHA512.html#a0a9104dce5f099aeba216e5fbcb1ee1a',1,'SHA512::clear()'],['../classSpeck.html#aa3866273282addabb9d3703c41fdc95f',1,'Speck::clear()'],['../classSpeckLowMemory.html#a5c4fcd9a8ac0d2cf9dd11ce678146d99',1,'SpeckLowMemory::clear()']]], + ['clear',['clear',['../classBitmap.html#a839dc8fab05a5ebf7a6b2e61436b2fa1',1,'Bitmap::clear()'],['../classAESCommon.html#a83e43f7d07e31d90fd7b768a93ecfce6',1,'AESCommon::clear()'],['../classBLAKE2b.html#a21623759bd381285ebf7e75a00c9c8a9',1,'BLAKE2b::clear()'],['../classBLAKE2s.html#a0848885f52df51dc53949d32a206e72d',1,'BLAKE2s::clear()'],['../classBlockCipher.html#a6f27d46e9dfa7761d014d828ad5f955b',1,'BlockCipher::clear()'],['../classCBCCommon.html#a7befadfe7384e0e857a96a59bf3845e9',1,'CBCCommon::clear()'],['../classCFBCommon.html#a847d320b0fe7f329385f26511b42c40d',1,'CFBCommon::clear()'],['../classChaCha.html#af533905f679066c41f4d6cd76bddb4cb',1,'ChaCha::clear()'],['../classChaChaPoly.html#a2d7fc3fd05a0b6c7c9c21fff6e939c9a',1,'ChaChaPoly::clear()'],['../classCipher.html#a4b7c3965646441a70d9ab934a7c92ab1',1,'Cipher::clear()'],['../classCTRCommon.html#ac0d6381c02fe2a8a017ad66d006a6ef2',1,'CTRCommon::clear()'],['../classEAXCommon.html#afa88b0f589e09103e9c69ace081db0af',1,'EAXCommon::clear()'],['../classGCMCommon.html#a06868ebd67a571aa68d88d5d072cece9',1,'GCMCommon::clear()'],['../classGHASH.html#a4b1ee789debf56f7f24807960ef0556e',1,'GHASH::clear()'],['../classHash.html#a4a959469433cd9348ab7f3ac6228bb34',1,'Hash::clear()'],['../classKeccakCore.html#aeff1df56e4a3103c99c1fe4307e60c66',1,'KeccakCore::clear()'],['../classOFBCommon.html#a55bf2396beb91c457bfc4c20ef5c8123',1,'OFBCommon::clear()'],['../classOMAC.html#a072715dbda39dc9c360cfcaab31d6aa7',1,'OMAC::clear()'],['../classPoly1305.html#ae3f3392b9a2bd0f3472e7e50dd7e21dd',1,'Poly1305::clear()'],['../classSHA256.html#add0d1649d533b27005ccd8508398c689',1,'SHA256::clear()'],['../classSHA3__256.html#a531467f995ef6fc901ad8c2b5776a8d1',1,'SHA3_256::clear()'],['../classSHA3__512.html#acfbc5e9b4d394f011d5132a2b156d260',1,'SHA3_512::clear()'],['../classSHA512.html#a0a9104dce5f099aeba216e5fbcb1ee1a',1,'SHA512::clear()'],['../classSpeck.html#aa3866273282addabb9d3703c41fdc95f',1,'Speck::clear()'],['../classSpeckSmall.html#aa93d9f0b5153425dc04e8fb8faff7513',1,'SpeckSmall::clear()'],['../classSpeckTiny.html#a303ecc2639459e47c6eeb21991d52ccf',1,'SpeckTiny::clear()']]], ['command',['command',['../classIRreceiver.html#a4b021592a2b089dc2f1e138a38506fda',1,'IRreceiver']]], ['computetag',['computeTag',['../classAuthenticatedCipher.html#a73fa4306053ed457e5c533b3127391c9',1,'AuthenticatedCipher::computeTag()'],['../classChaChaPoly.html#a92d850ad7027829e4072c43bd5028f95',1,'ChaChaPoly::computeTag()'],['../classEAXCommon.html#ab5a61bba48561d6e7e6b8bafc51d91e3',1,'EAXCommon::computeTag()'],['../classGCMCommon.html#a444634bd4469bb5d404ac882d1d8fdf4',1,'GCMCommon::computeTag()']]], ['copy',['copy',['../classBitmap.html#ab22fe1f3871934987a670b559f67c67c',1,'Bitmap']]], diff --git a/search/functions_3.js b/search/functions_3.js index 8ca37601..a1eb2b26 100644 --- a/search/functions_3.js +++ b/search/functions_3.js @@ -2,8 +2,10 @@ var searchData= [ ['data',['data',['../classBitmap.html#a5eeed27c176eb6e4a2c39ea83444e27d',1,'Bitmap::data()'],['../classBitmap.html#a20fea2a946545aa3b5edd78245149e5f',1,'Bitmap::data() const ']]], ['dayofweek',['dayOfWeek',['../classRTC.html#a525a9c1dad89613708f47a683eb316aa',1,'RTC']]], + ['dbl',['dbl',['../classGF128.html#aef22f6b7be5937f60ed2b7bcf831e52d',1,'GF128']]], + ['dbleax',['dblEAX',['../classGF128.html#a56000a4cd7d436de42360e9d43eecde4',1,'GF128']]], ['decrypt',['decrypt',['../classCBCCommon.html#ab46a2625cae9a654c708e1f31a0e22b6',1,'CBCCommon::decrypt()'],['../classCFBCommon.html#aaaa3d61c5743e30e355207c193c0b0ef',1,'CFBCommon::decrypt()'],['../classChaCha.html#a1f54b2b51b59428010f81a6c4dc4e42c',1,'ChaCha::decrypt()'],['../classChaChaPoly.html#a42f556f202b1166486434ee15b6d95a0',1,'ChaChaPoly::decrypt()'],['../classCipher.html#ac6099d1a0d7f2ff67b0e4ccb4a17eb08',1,'Cipher::decrypt()'],['../classCTRCommon.html#a0943387cf1124258389702e0690740fe',1,'CTRCommon::decrypt()'],['../classEAXCommon.html#a63ce8ae45db137ec9d447216b84245c2',1,'EAXCommon::decrypt()'],['../classGCMCommon.html#a60912d3ab5766aa68dc9b3111ac2c0d7',1,'GCMCommon::decrypt()'],['../classOFBCommon.html#aeb3636d7175b150e2bf16367e51c2e36',1,'OFBCommon::decrypt()']]], - ['decryptblock',['decryptBlock',['../classAESCommon.html#a95a806adf42f975765ff62907efdc639',1,'AESCommon::decryptBlock()'],['../classBlockCipher.html#ac3ba2450222aa1ea804ae4881ab6440c',1,'BlockCipher::decryptBlock()'],['../classSpeck.html#ad8c040df1c52d2559da8fdb3963d28b4',1,'Speck::decryptBlock()'],['../classSpeckLowMemory.html#adf789790cf8ba15eb7025eea965215e9',1,'SpeckLowMemory::decryptBlock()']]], + ['decryptblock',['decryptBlock',['../classAESCommon.html#a95a806adf42f975765ff62907efdc639',1,'AESCommon::decryptBlock()'],['../classBlockCipher.html#ac3ba2450222aa1ea804ae4881ab6440c',1,'BlockCipher::decryptBlock()'],['../classSpeck.html#ad8c040df1c52d2559da8fdb3963d28b4',1,'Speck::decryptBlock()'],['../classSpeckSmall.html#acced022717603980ecca21b3f953bf51',1,'SpeckSmall::decryptBlock()'],['../classSpeckTiny.html#a19e54aef7d1b3ef92e8140dd9c308c3c',1,'SpeckTiny::decryptBlock()']]], ['defaultfield',['defaultField',['../classForm.html#aba75b59f68b31dd77dbbac9ab5c3124b',1,'Form']]], ['derivepublickey',['derivePublicKey',['../classEd25519.html#ab62bac52ed07f77f76f3ff0fccd71cb2',1,'Ed25519']]], ['destroy',['destroy',['../classRNGClass.html#a9901367d86f2303a59bbc12fe91cad00',1,'RNGClass']]], diff --git a/search/functions_4.js b/search/functions_4.js index 8a502fe0..1a57bfce 100644 --- a/search/functions_4.js +++ b/search/functions_4.js @@ -10,7 +10,7 @@ var searchData= ['enabletimer1',['enableTimer1',['../classDMD.html#a4c3b04b384f3d656a9b59690836775e2',1,'DMD']]], ['enabletimer2',['enableTimer2',['../classDMD.html#a5469775db7fafebca2cdbc6a6372fb97',1,'DMD']]], ['encrypt',['encrypt',['../classCBCCommon.html#a41d2f655a7df13cfcd009b2882e13147',1,'CBCCommon::encrypt()'],['../classCFBCommon.html#a57af3692389bed300d3cfdf351351c51',1,'CFBCommon::encrypt()'],['../classChaCha.html#acd4fff140b8871c233d9a31abf753ed8',1,'ChaCha::encrypt()'],['../classChaChaPoly.html#a7df4acd04f459ecf9d3b24317bde94a3',1,'ChaChaPoly::encrypt()'],['../classCipher.html#ad2832bd61039d61560e34ea3382ca562',1,'Cipher::encrypt()'],['../classCTRCommon.html#a201bda584d111552ce8ec09fac759963',1,'CTRCommon::encrypt()'],['../classEAXCommon.html#aad2c563f749535f539b8efbd74b09099',1,'EAXCommon::encrypt()'],['../classGCMCommon.html#a01ac69afe3d9fc4d72b2ea5dc242e55c',1,'GCMCommon::encrypt()'],['../classOFBCommon.html#a984d81a460e0799895b19dc48c3b5cf8',1,'OFBCommon::encrypt()']]], - ['encryptblock',['encryptBlock',['../classAESCommon.html#a2d95f6159abfcd92b5841f9018e44296',1,'AESCommon::encryptBlock()'],['../classBlockCipher.html#aed0788b25f6bb2f1bd47d5a5f0c5db33',1,'BlockCipher::encryptBlock()'],['../classSpeck.html#af6b8b91929e4b5b2023400688c9437f9',1,'Speck::encryptBlock()'],['../classSpeckLowMemory.html#ad74f9cec21584184511f6d731b8ad5cf',1,'SpeckLowMemory::encryptBlock()']]], + ['encryptblock',['encryptBlock',['../classAESCommon.html#a2d95f6159abfcd92b5841f9018e44296',1,'AESCommon::encryptBlock()'],['../classBlockCipher.html#aed0788b25f6bb2f1bd47d5a5f0c5db33',1,'BlockCipher::encryptBlock()'],['../classSpeck.html#af6b8b91929e4b5b2023400688c9437f9',1,'Speck::encryptBlock()'],['../classSpeckTiny.html#a5dd2cf40dc48addb6a393e78a58a07c0',1,'SpeckTiny::encryptBlock()']]], ['endwrite',['endWrite',['../classI2CMaster.html#ab29f63551ddeb032a91505d1c0b8ac41',1,'I2CMaster::endWrite()'],['../classSoftI2C.html#aa12ae82813598b2e9ea70463c23c5bf3',1,'SoftI2C::endWrite()']]], ['enterfield',['enterField',['../classBoolField.html#ab3f1e610b52caed7e41016f6ae3d7d09',1,'BoolField::enterField()'],['../classField.html#aa032bbeacb405c56546cb56fbbee94f5',1,'Field::enterField()'],['../classIntField.html#a51d9127b660e8dd7f87718acd230202a',1,'IntField::enterField()'],['../classListField.html#a191b79b460e45cf48e04b04eface2888',1,'ListField::enterField()'],['../classTextField.html#aa78f1354f9240b64fabd6f996e312f32',1,'TextField::enterField()'],['../classTimeField.html#ae914d6b870283a334d2d669460f7646b',1,'TimeField::enterField()']]], ['eval',['eval',['../classCurve25519.html#a2e4b7dd83a019b32c76584c99bfda21a',1,'Curve25519']]], diff --git a/search/functions_5.js b/search/functions_5.js index fb383ad2..8102bd63 100644 --- a/search/functions_5.js +++ b/search/functions_5.js @@ -3,7 +3,7 @@ var searchData= ['falselabel',['falseLabel',['../classBoolField.html#a59ad7a8a33290bda0d9fbb3df4f09b01',1,'BoolField']]], ['field',['Field',['../classField.html#ac4ea0d104376233c3f0bfc080ec8564e',1,'Field::Field(const String &label)'],['../classField.html#a7e2bdb203ddfd9219696f263c1731fe7',1,'Field::Field(Form &form, const String &label)']]], ['fill',['fill',['../classBitmap.html#a99da820f9280aace6b512801d5a5e2b2',1,'Bitmap::fill(int x, int y, int width, int height, Color color)'],['../classBitmap.html#ac661adab340858b541a2fe44e6303f56',1,'Bitmap::fill(int x, int y, int width, int height, Bitmap::ProgMem pattern, Color color=White)']]], - ['finalize',['finalize',['../classBLAKE2b.html#a0cd8146b7868bd0f4c24a3856f106d17',1,'BLAKE2b::finalize()'],['../classBLAKE2s.html#a751a3d772cbe1cd1dad83dbd09853b1b',1,'BLAKE2s::finalize()'],['../classGHASH.html#ab221298ca69c9612bfbfd3dedcb28307',1,'GHASH::finalize()'],['../classHash.html#a09b3ccec22763fc86b1415695862977c',1,'Hash::finalize()'],['../classPoly1305.html#aab3fa6c5f6fa7d9ca6c82bead38f499c',1,'Poly1305::finalize()'],['../classSHA256.html#a695157bcdf5495ba892ebac309f3abd6',1,'SHA256::finalize()'],['../classSHA3__256.html#a8fe7cad1f83bd1bae1a0d521324247a1',1,'SHA3_256::finalize()'],['../classSHA3__512.html#ac0227aafb5f047bb50f0bd84df0b4b5b',1,'SHA3_512::finalize()'],['../classSHA512.html#afc136ad0e77de527b031db3fb8b32464',1,'SHA512::finalize()']]], + ['finalize',['finalize',['../classBLAKE2b.html#a0cd8146b7868bd0f4c24a3856f106d17',1,'BLAKE2b::finalize()'],['../classBLAKE2s.html#a751a3d772cbe1cd1dad83dbd09853b1b',1,'BLAKE2s::finalize()'],['../classGHASH.html#ab221298ca69c9612bfbfd3dedcb28307',1,'GHASH::finalize()'],['../classHash.html#a09b3ccec22763fc86b1415695862977c',1,'Hash::finalize()'],['../classOMAC.html#ae4ccdaee764df779f7ae0c7433078b3e',1,'OMAC::finalize()'],['../classPoly1305.html#aab3fa6c5f6fa7d9ca6c82bead38f499c',1,'Poly1305::finalize()'],['../classSHA256.html#a695157bcdf5495ba892ebac309f3abd6',1,'SHA256::finalize()'],['../classSHA3__256.html#a8fe7cad1f83bd1bae1a0d521324247a1',1,'SHA3_256::finalize()'],['../classSHA3__512.html#ac0227aafb5f047bb50f0bd84df0b4b5b',1,'SHA3_512::finalize()'],['../classSHA512.html#afc136ad0e77de527b031db3fb8b32464',1,'SHA512::finalize()']]], ['finalizehmac',['finalizeHMAC',['../classBLAKE2b.html#a29fafbba26e3c1d896b4d4c428f7d52a',1,'BLAKE2b::finalizeHMAC()'],['../classBLAKE2s.html#a3f910f3bd48cc4a9c5330c31bcda31fc',1,'BLAKE2s::finalizeHMAC()'],['../classHash.html#aab42fa5420cc0bda4321a3d3866cfd06',1,'Hash::finalizeHMAC()'],['../classSHA256.html#a28bc2510c5bdaf210a012f9f21a753cd',1,'SHA256::finalizeHMAC()'],['../classSHA3__256.html#a001215fa1b7d2c30717b4b5b1618d68c',1,'SHA3_256::finalizeHMAC()'],['../classSHA3__512.html#a25c9d2da26d01d46ba6b72c8a7905ea0',1,'SHA3_512::finalizeHMAC()'],['../classSHA512.html#a1fe9533f0d3dfdb426eb3dc4bdc31904',1,'SHA512::finalizeHMAC()']]], ['firedalarm',['firedAlarm',['../classDS3231RTC.html#a6a5b3717ff65528de566c021eb821b94',1,'DS3231RTC::firedAlarm()'],['../classDS3232RTC.html#a79649f100a4562b9c1ba7c69e85cbca3',1,'DS3232RTC::firedAlarm()']]], ['font',['font',['../classBitmap.html#a7bf0a232b4bd12573cc570cc0edef47c',1,'Bitmap']]], diff --git a/search/functions_8.js b/search/functions_8.js index ce2a6f03..4102c271 100644 --- a/search/functions_8.js +++ b/search/functions_8.js @@ -1,5 +1,7 @@ var searchData= [ + ['initfirst',['initFirst',['../classOMAC.html#a0274138725ddf6240c030574bae3975c',1,'OMAC']]], + ['initnext',['initNext',['../classOMAC.html#ad496c7d2de4f22fd4192345003e75ee5',1,'OMAC']]], ['intfield',['IntField',['../classIntField.html#a9df274c4100ed37d2d78738f09fc53b6',1,'IntField::IntField(const String &label)'],['../classIntField.html#a10c9c958bcde276698f1f1f9bff949dd',1,'IntField::IntField(Form &form, const String &label, int minValue, int maxValue, int stepValue, int value)'],['../classIntField.html#a2b99fa19be6a0ed01ddc4939352b372e',1,'IntField::IntField(Form &form, const String &label, int minValue, int maxValue, int stepValue, int value, const String &suffix)']]], ['invert',['invert',['../classBitmap.html#a6d85556bcc9fac91d33f0f6f7a6430dd',1,'Bitmap']]], ['irreceiver',['IRreceiver',['../classIRreceiver.html#a06eccb8b8311eac395e4b20c4e0163e3',1,'IRreceiver']]], diff --git a/search/functions_9.js b/search/functions_9.js index 4fe454b1..f2e530ca 100644 --- a/search/functions_9.js +++ b/search/functions_9.js @@ -1,5 +1,5 @@ var searchData= [ ['keccakcore',['KeccakCore',['../classKeccakCore.html#a850c8e85bdb6b347411239716535d9c9',1,'KeccakCore']]], - ['keysize',['keySize',['../classAES128.html#aa871832a156f0ea61b964e489670ae9d',1,'AES128::keySize()'],['../classAES192.html#ade28843e51e262b30eb55791c83fd791',1,'AES192::keySize()'],['../classAES256.html#af8ed6412bae6fc78274f60344899366a',1,'AES256::keySize()'],['../classBlockCipher.html#afde6004a859e015d877eab3c37042a0f',1,'BlockCipher::keySize()'],['../classCBCCommon.html#adb7daacfe2a4fca3d13b62b75372fe4e',1,'CBCCommon::keySize()'],['../classCFBCommon.html#a82899da983bc70bc8152ee67f424552e',1,'CFBCommon::keySize()'],['../classChaCha.html#af286083291fab2bd36dc7ad1f54d5cd7',1,'ChaCha::keySize()'],['../classChaChaPoly.html#a666760e68cb53f28ba0a8dc09039c0fb',1,'ChaChaPoly::keySize()'],['../classCipher.html#a4cea432ea0278c865441f17cbb88b1ab',1,'Cipher::keySize()'],['../classCTRCommon.html#a29ce8e13a302350397fc6790a686bea2',1,'CTRCommon::keySize()'],['../classEAXCommon.html#a027956913eecfa0bc760f20f3b62df29',1,'EAXCommon::keySize()'],['../classGCMCommon.html#a134ba35e740a18bee3c45502b4149eae',1,'GCMCommon::keySize()'],['../classOFBCommon.html#a76ea9f9ea9dd137778338813e534a8ce',1,'OFBCommon::keySize()'],['../classSpeck.html#a061e43c1363178cda088c3f46e07d87b',1,'Speck::keySize()'],['../classSpeckLowMemory.html#ab7cd4c7d2acb5b3dfa22ce08d659f279',1,'SpeckLowMemory::keySize()']]] + ['keysize',['keySize',['../classAES128.html#aa871832a156f0ea61b964e489670ae9d',1,'AES128::keySize()'],['../classAES192.html#ade28843e51e262b30eb55791c83fd791',1,'AES192::keySize()'],['../classAES256.html#af8ed6412bae6fc78274f60344899366a',1,'AES256::keySize()'],['../classBlockCipher.html#afde6004a859e015d877eab3c37042a0f',1,'BlockCipher::keySize()'],['../classCBCCommon.html#adb7daacfe2a4fca3d13b62b75372fe4e',1,'CBCCommon::keySize()'],['../classCFBCommon.html#a82899da983bc70bc8152ee67f424552e',1,'CFBCommon::keySize()'],['../classChaCha.html#af286083291fab2bd36dc7ad1f54d5cd7',1,'ChaCha::keySize()'],['../classChaChaPoly.html#a666760e68cb53f28ba0a8dc09039c0fb',1,'ChaChaPoly::keySize()'],['../classCipher.html#a4cea432ea0278c865441f17cbb88b1ab',1,'Cipher::keySize()'],['../classCTRCommon.html#a29ce8e13a302350397fc6790a686bea2',1,'CTRCommon::keySize()'],['../classEAXCommon.html#a027956913eecfa0bc760f20f3b62df29',1,'EAXCommon::keySize()'],['../classGCMCommon.html#a134ba35e740a18bee3c45502b4149eae',1,'GCMCommon::keySize()'],['../classOFBCommon.html#a76ea9f9ea9dd137778338813e534a8ce',1,'OFBCommon::keySize()'],['../classSpeck.html#a061e43c1363178cda088c3f46e07d87b',1,'Speck::keySize()'],['../classSpeckTiny.html#a5587909ba48776b01bbd40b339b1262e',1,'SpeckTiny::keySize()']]] ]; diff --git a/search/functions_a.js b/search/functions_a.js index 9547f241..63e20740 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)']]], ['loop',['loop',['../classBlinkLED.html#aeeaf42b94c5392935f00f0f12a58c75e',1,'BlinkLED::loop()'],['../classCharlieplex.html#a8313edeacd8387c428b8299d52584d6a',1,'Charlieplex::loop()'],['../classChaseLEDs.html#a8745fa6b9f33b6c6274a563dd4dea786',1,'ChaseLEDs::loop()'],['../classDMD.html#a2c74a0845ef6080056b972d490648114',1,'DMD::loop()'],['../classRNGClass.html#a8cb91e39f0c4591de5bf98b1e2880b13',1,'RNGClass::loop()']]], diff --git a/search/functions_b.js b/search/functions_b.js index 519c4c46..13a3edb0 100644 --- a/search/functions_b.js +++ b/search/functions_b.js @@ -5,6 +5,7 @@ var searchData= ['maxvalue',['maxValue',['../classIntField.html#aaa0adcb0d16e822e5f176be5cb9ca8ad',1,'IntField']]], ['melody',['Melody',['../classMelody.html#a9edc4165a49368dd5d78eedf982c38b9',1,'Melody']]], ['minvalue',['minValue',['../classIntField.html#af3dab3f2b46d29136d7a93ce46b0b8fb',1,'IntField']]], - ['mul',['mul',['../classBigNumberUtil.html#a1c2c5484f2bf440ae292fd3dfd2d594f',1,'BigNumberUtil']]], - ['mul_5fp',['mul_P',['../classBigNumberUtil.html#aacdee1806a239eb9e58753ef1ddb964a',1,'BigNumberUtil']]] + ['mul',['mul',['../classBigNumberUtil.html#a1c2c5484f2bf440ae292fd3dfd2d594f',1,'BigNumberUtil::mul()'],['../classGF128.html#a7d9a341a1715d37d25feba21627bc3ab',1,'GF128::mul()']]], + ['mul_5fp',['mul_P',['../classBigNumberUtil.html#aacdee1806a239eb9e58753ef1ddb964a',1,'BigNumberUtil']]], + ['mulinit',['mulInit',['../classGF128.html#a43adbd72619e4f97ce427a60e7c0a248',1,'GF128']]] ]; diff --git a/search/functions_d.js b/search/functions_d.js index 714f5915..52ce8ed3 100644 --- a/search/functions_d.js +++ b/search/functions_d.js @@ -3,6 +3,7 @@ var searchData= ['ofb',['OFB',['../classOFB.html#a0b71b5cbcf01254799cd5eb37074a8cb',1,'OFB']]], ['ofbcommon',['OFBCommon',['../classOFBCommon.html#a7f7e0cffcd7e2d7e06b7b1ae978a8f7d',1,'OFBCommon']]], ['offtime',['offTime',['../classBlinkLED.html#a74c640edf1a9f6e8bea1e139462908bc',1,'BlinkLED']]], + ['omac',['OMAC',['../classOMAC.html#ae84365423cef3f769464489848942559',1,'OMAC']]], ['ontime',['onTime',['../classBlinkLED.html#a8475f78f41d1a2d5d719bec8cbbb3ebb',1,'BlinkLED']]], ['output',['output',['../classNoiseSource.html#a1af7449a5ae4a8acd34ac218c9eec6c1',1,'NoiseSource']]] ]; diff --git a/structRTCAlarm.html b/structRTCAlarm.html index af7cada2..4eb99735 100644 --- a/structRTCAlarm.html +++ b/structRTCAlarm.html @@ -200,7 +200,7 @@ uint8_t  diff --git a/structRTCDate.html b/structRTCDate.html index 86068769..e1a33c5a 100644 --- a/structRTCDate.html +++ b/structRTCDate.html @@ -123,7 +123,7 @@ uint8_t  diff --git a/structRTCTime.html b/structRTCTime.html index 39fc69d9..85a3ff4e 100644 --- a/structRTCTime.html +++ b/structRTCTime.html @@ -123,7 +123,7 @@ uint8_t