[ 
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)

Reply via email to