| 752 | | UR_CALL_UNUSED_TH |
| 753 | | |
| 754 | | if( ur_binarySlice( tos, &cpA, &cpB ) ) |
| 755 | | { |
| 756 | | ur_initType(tos, UT_INT); |
| 757 | | ur_int(tos) = checksum_crc16( (uint8_t*) cpA, cpB - cpA ); |
| | 757 | if( ! ur_isAWord( tos ) ) |
| | 758 | goto typeErr; |
| | 759 | |
| | 760 | UR_S_DROP; |
| | 761 | res = UR_TOS; |
| | 762 | |
| | 763 | if( ur_binarySlice( res, &cpA, &cpB ) ) |
| | 764 | { |
| | 765 | switch( ur_atom(tos) ) |
| | 766 | { |
| | 767 | case UR_ATOM_CRC16: |
| | 768 | ur_initType(res, UT_INT); |
| | 769 | ur_int(res) = checksum_crc16( (uint8_t*) cpA, cpB - cpA ); |
| | 770 | return; |
| | 771 | |
| | 772 | case UR_ATOM_SHA1: |
| | 773 | { |
| | 774 | SHA1_CTX context; |
| | 775 | UIndex binN; |
| | 776 | UBinary* bin; |
| | 777 | |
| | 778 | binN = ur_makeBinary( 20 ); |
| | 779 | bin = ur_binPtr( binN ); |
| | 780 | bin->used = 20; |
| | 781 | |
| | 782 | SHA1Init( &context ); |
| | 783 | SHA1Update( &context, (uint8_t*) cpA, cpB - cpA ); |
| | 784 | SHA1Final( bin->ptr.b, &context ); |
| | 785 | |
| | 786 | ur_initType(res, UT_BINARY); |
| | 787 | ur_setSeries(res, binN, 0); |
| | 788 | } |
| | 789 | return; |
| | 790 | } |
| | 791 | goto typeErr; |