[ https://issues.apache.org/jira/browse/TRAFODION-2229?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15633653#comment-15633653 ]
ASF GitHub Bot commented on TRAFODION-2229: ------------------------------------------- Github user DaveBirdsall commented on a diff in the pull request: https://github.com/apache/incubator-trafodion/pull/813#discussion_r86404501 --- Diff: core/sql/exp/exp_function.cpp --- @@ -7900,6 +7936,114 @@ ex_expr::exp_return_type ExFunctionInetNtoa::eval(char * op_data[], return ex_expr::EXPR_OK; } +ex_expr::exp_return_type ExFunctionCrc32::eval(char * op_data[], + CollHeap *heap, + ComDiagsArea **diags) +{ + Attributes *resultAttr = getOperand(0); + Attributes *srcAttr = getOperand(1); + + Lng32 slen = srcAttr->getLength(op_data[-MAX_OPERANDS+1]); + Lng32 rlen = resultAttr->getLength(); + + *(ULng32*)op_data[0] = 0; + ULng32 crc = crc32(0L, Z_NULL, 0); + crc = crc32 (crc, (const Bytef*)op_data[1], slen); + *(ULng32*)op_data[0] = crc; + return ex_expr::EXPR_OK; +} + +//only support SHA 256 for this version +//TBD: add 224 and 384, 512 in next version +ex_expr::exp_return_type ExFunctionSha2::eval(char * op_data[], + CollHeap *heap, + ComDiagsArea **diags) +{ + + unsigned char sha[SHA256_DIGEST_LENGTH+ 1]={0}; + + Attributes *resultAttr = getOperand(0); + Attributes *srcAttr = getOperand(1); + + Lng32 slen = srcAttr->getLength(op_data[-MAX_OPERANDS+1]); + Lng32 rlen = resultAttr->getLength(); + + memset(op_data[0], 0, rlen); + + SHA256_CTX sha_ctx; + + SHA256_Init(&sha_ctx); + SHA256_Update(&sha_ctx, op_data[1], slen); + SHA256_Final((unsigned char*) sha,&sha_ctx); + char tmp[2]; + for(int i=0; i < SHA256_DIGEST_LENGTH; i++ ) + { + tmp[0]=tmp[1]='0'; + sprintf(tmp, "%.2x", (int)sha[i]); + memcpy(op_data[0]+i*2, tmp, 2); + } + + return ex_expr::EXPR_OK; +} + +ex_expr::exp_return_type ExFunctionSha::eval(char * op_data[], + CollHeap *heap, + ComDiagsArea **diags) +{ + + unsigned char sha[SHA_DIGEST_LENGTH + 1]={0}; + + Attributes *resultAttr = getOperand(0); + Attributes *srcAttr = getOperand(1); + Lng32 slen = srcAttr->getLength(op_data[-MAX_OPERANDS+1]); + Lng32 rlen = resultAttr->getLength(); + memset(op_data[0], 0, rlen); + + SHA_CTX sha_ctx; + + SHA1_Init(&sha_ctx); + SHA1_Update(&sha_ctx, op_data[1], slen); + SHA1_Final((unsigned char*) sha,&sha_ctx); + char tmp[2]; + for(int i=0; i < SHA_DIGEST_LENGTH ; i++ ) + { + tmp[0]=tmp[1]='0'; + sprintf(tmp, "%.2x", (int)sha[i]); + memcpy(op_data[0]+i*2, tmp, 2); + } + + return ex_expr::EXPR_OK; +} + +ex_expr::exp_return_type ExFunctionMd5::eval(char * op_data[], + CollHeap *heap, + ComDiagsArea **diags) +{ + unsigned char md5[17]={0}; + + Attributes *resultAttr = getOperand(0); + Attributes *srcAttr = getOperand(1); + + Lng32 slen = srcAttr->getLength(op_data[-MAX_OPERANDS+1]); + Lng32 rlen = resultAttr->getLength(); + + memset(op_data[0], 0, rlen); + MD5_CTX md5_ctx; + + MD5_Init(&md5_ctx); + MD5_Update(&md5_ctx, op_data[1], slen); + MD5_Final((unsigned char*) md5,&md5_ctx); + char tmp[2]; --- End diff -- This buffer is too short. > add Hashing functions to Trafodion > ---------------------------------- > > Key: TRAFODION-2229 > URL: https://issues.apache.org/jira/browse/TRAFODION-2229 > Project: Apache Trafodion > Issue Type: Sub-task > Reporter: liu ming > Assignee: liu ming > > CRC32() Compute a cyclic redundancy check value > MD5() Calculate MD5 checksum > SHA1(), SHA() Calculate an SHA-1 160-bit checksum > SHA2() Calculate an SHA-2 checksum -- This message was sent by Atlassian JIRA (v6.3.4#6332)