program demo_sha256 use M_hashkeys, only : sha256, dirty_sha256 implicit none character(len=:),allocatable :: str character(len=64) :: ref ! Test the sha256 function with a set of reference strings. str="" ref="E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855" call unit_check('sha256',sha256(str)==ref,'test sha256 1') str="abc" ref="BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD" call unit_check('sha256',sha256(str)==ref,'test sha256 2') str="abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" ref="248D6A61D20638B8E5C026930C3E6039A33CE45964FF2167F6ECEDD419DB06C1" call unit_check('sha256',sha256(str)==ref,'test sha256 3') str="abcdefghbcdefghicdefghijdefghijkefghijklfghi& &jklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" ref="CF5B16A778AF8380036CE59E7B0492370B249B11E8F07A51AFAC45037AFEE9D1" call unit_check('sha256',sha256(str)==ref,'test sha256 4') str=repeat("a",1000000) ref="CDC76E5C9914FB9281A1C7E284D73E67F1809A48A497200E046D39CCC7112CD0" call unit_check('sha256',sha256(str)==ref,'test sha256 5') str="message digest" ref="F7846F55CF23E14EEBEAB5B4E1550CAD5B509E3348FBC4EFA3A1413D393CB650" call unit_check('sha256',sha256(str)==ref,'test sha256 6') str="secure hash algorithm" ref="F30CEB2BB2829E79E4CA9753D35A8ECC00262D164CC077080295381CBD643F0D" call unit_check('sha256',sha256(str)==ref,'test sha256 7') str="SHA256 is considered to be safe" ref="6819D915C73F4D1E77E4E1B52D1FA0F9CF9BEAEAD3939F15874BD988E2A23630" call unit_check('sha256',sha256(str)==ref,'test sha256 8') str="For this sample, this 63-byte string will be used as input data" ref="F08A78CBBAEE082B052AE0708F32FA1E50C5C421AA772BA5DBB406A2EA6BE342" call unit_check('sha256',sha256(str)==ref,'test sha256 9') str="This is exactly 64 bytes long, not counting the terminating byte" ref="AB64EFF7E88E2E46165E29F2BCE41826BD4C7B3552F6B382A9E7D3AF47C245F8" call unit_check('sha256',sha256(str)==ref,'test sha256 10') ! Check the quick and dirty implementation as well. ref="69E3FACD5F08321F78117BD53476E5321845433356F106E7013E68EC367F3017" call unit_check('sha256',dirty_sha256(str)==ref,'test dirtysha256 1') !!str=repeat("abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno",16777216) !!ref="50E72A0E26442FE2552DC3938AC58658228C0CBFB1D2CA872AE435266FCD055E" !!call unit_check('sha256',sha256(str)==ref,'test sha256 11 -- long test') contains subroutine unit_check(name,test,message) character(len=*),intent(in) :: name logical,intent(in) :: test character(len=*),intent(in) :: message write(*,'(a)') repeat("=",64) write(*,'(a)') sha256(str) write(*,'(a)') ref if(test)then write(*,*)trim(name)," PASSED: ",trim(message) else write(*,*)trim(name)," FAILED: ",trim(message) endif end subroutine unit_check ! end program demo_sha256