yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
7b570feed
master
1// unit-test-sha1.cpp 2#include "../../source/core/slang-crypto.h" 3#include "unit-test/slang-unit-test.h" 4 5using namespace Slang ; 6 7SLANG_UNIT_TEST (crypto ) 8{ 9// HashDigest 10 { 11using Digest = HashDigest < 8 > ; 12Digest empty ; 13SLANG_CHECK (empty .data [0 ]== 0 && empty .data [1 ]== 0 ); 14SLANG_CHECK (empty .toString ()== "0000000000000000" ); 15 16Digest all = Digest ("ffffffffffffffff" ); 17SLANG_CHECK (all .data [0 ]== 0xffffffff && all .data [1 ]== 0xffffffff ); 18SLANG_CHECK (all .toString ()== "ffffffffffffffff" ); 19 20SLANG_CHECK (empty == Digest ("0000000000000000" )); 21SLANG_CHECK (all == Digest ("ffffffffffffffff" )); 22SLANG_CHECK (empty != all ); 23 24SLANG_CHECK (Digest ("invalid" )== empty ); 25SLANG_CHECK (Digest ("X000000000000000" )== empty ); 26SLANG_CHECK (Digest (" 000000000000000" )== empty ); 27 28SLANG_CHECK (Digest ("0123456789abcdef" ).toString ()== "0123456789abcdef" ); 29 30Slang ::ComPtr < ISlangBlob > blob = Digest ("0123456789abcdef" ).toBlob (); 31const uint8_t check []= {0x01 ,0x23 ,0x45 ,0x67 ,0x89 ,0xab ,0xcd ,0xef }; 32SLANG_CHECK (blob -> getBufferSize ()== 8 ); 33SLANG_CHECK (::memcmp (blob -> getBufferPointer (),check ,8 )== 0 ); 34 35SLANG_CHECK (Digest (blob )== Digest ("0123456789abcdef" )); 36 } 37 38// MD5 39 40// Empty string 41 { 42MD5 sha1 ; 43auto digest = sha1 .finalize (); 44SLANG_CHECK (digest .toString ()== "d41d8cd98f00b204e9800998ecf8427e" ); 45 } 46 47// One call to update() 48 { 49MD5 sha1 ; 50const String str ("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod " 51"tempor incididunt ut labore et dolore magna aliqua." ); 52sha1 .update (str .getBuffer (),str .getLength ()); 53auto digest = sha1 .finalize (); 54SLANG_CHECK (digest .toString ()== "818c6e601a24f72750da0f6c9b8ebe28" ); 55 } 56 57// Two calls to update() 58 { 59MD5 sha1 ; 60const String str1 ("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod " 61"tempor incididunt ut labore et dolore magna aliqua." ); 62const String str2 ("Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi " 63"ut aliquip ex ea commodo consequat." ); 64sha1 .update (str1 .getBuffer (),str1 .getLength ()); 65sha1 .update (str2 .getBuffer (),str2 .getLength ()); 66auto digest = sha1 .finalize (); 67SLANG_CHECK (digest .toString ()== "87d3caecb0ab82faae84d60fde994aca" ); 68 } 69 70// compute() 71 { 72SLANG_CHECK (MD5 ::compute (nullptr ,0 ).toString ()== "d41d8cd98f00b204e9800998ecf8427e" ); 73const String str ("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod " 74"tempor incididunt ut labore et dolore magna aliqua." ); 75SLANG_CHECK ( 76MD5 ::compute (str .getBuffer (),str .getLength ()).toString ()== 77"818c6e601a24f72750da0f6c9b8ebe28" ); 78 } 79 80// SHA1 81 82// Empty string 83 { 84SHA1 sha1 ; 85auto digest = sha1 .finalize (); 86SLANG_CHECK (digest .toString ()== "da39a3ee5e6b4b0d3255bfef95601890afd80709" ); 87 } 88 89// One call to update() 90 { 91SHA1 sha1 ; 92const String str ("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod " 93"tempor incididunt ut labore et dolore magna aliqua." ); 94sha1 .update (str .getBuffer (),str .getLength ()); 95auto digest = sha1 .finalize (); 96SLANG_CHECK (digest .toString ()== "cca0871ecbe200379f0a1e4b46de177e2d62e655" ); 97 } 98 99// Two calls to update() 100 { 101SHA1 sha1 ; 102const String str1 ("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod " 103"tempor incididunt ut labore et dolore magna aliqua." ); 104const String str2 ("Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi " 105"ut aliquip ex ea commodo consequat." ); 106sha1 .update (str1 .getBuffer (),str1 .getLength ()); 107sha1 .update (str2 .getBuffer (),str2 .getLength ()); 108auto digest = sha1 .finalize (); 109SLANG_CHECK (digest .toString ()== "7a8213edf9976d2e693f27bbc7dc41546bcfcc97" ); 110 } 111 112// compute() 113 { 114SLANG_CHECK ( 115SHA1 ::compute (nullptr ,0 ).toString ()== "da39a3ee5e6b4b0d3255bfef95601890afd80709" ); 116const String str ("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod " 117"tempor incididunt ut labore et dolore magna aliqua." ); 118SLANG_CHECK ( 119SHA1 ::compute (str .getBuffer (),str .getLength ()).toString ()== 120"cca0871ecbe200379f0a1e4b46de177e2d62e655" ); 121 } 122 123// DigestBuider 124 125// Raw numerical values, etc. 126 { 127DigestBuilder < MD5 > builder ; 128 129int64_t valueA = -1 ; 130uint64_t valueB = 1 ; 131builder .append (valueA ); 132builder .append (valueB ); 133 134auto digest = builder .finalize (); 135SLANG_CHECK (digest .toString ()== "5ba171e20898bdd205639013746f2679" ); 136 } 137 138// List 139 { 140DigestBuilder < MD5 > builder ; 141 142List < int64_t > listA ; 143listA .add (1 ); 144listA .add (2 ); 145listA .add (3 ); 146listA .add (4 ); 147builder .append (listA ); 148 149auto digest = builder .finalize (); 150SLANG_CHECK (digest .toString ()== "9f66c130786a1a05e4731f71a3c5f172" ); 151 } 152 153// UnownedStringSlice 154 { 155DigestBuilder < MD5 > builder ; 156 157UnownedStringSlice stringSlice = UnownedStringSlice ("String Slice Test" ); 158builder .append (stringSlice ); 159 160auto digest = builder .finalize (); 161SLANG_CHECK (digest .toString ()== "5d6cc58e1824a4dfd0cf57395b603316" ); 162 } 163 164// String 165 { 166DigestBuilder < MD5 > builder ; 167 168String str = String ("String Test" ); 169builder .append (str ); 170 171auto digest = builder .finalize (); 172SLANG_CHECK (digest .toString ()== "df5a79cc2170c7401cf0a506ceb0ce24" ); 173 } 174 175// Digest 176 { 177DigestBuilder < MD5 > builder ; 178 179MD5 ::Digest hash ; 180builder .append (hash ); 181 182auto digest = builder .finalize (); 183SLANG_CHECK (digest .toString ()== "4ae71336e44bf9bf79d2752e234818a5" ); 184 } 185}