/**
 * Generate a random number in the buffer of length bits
 *
 * @param buffer to store the generated random number
 * @param length in bits of the random number to generate
 */
void crypto_generate_random(ByteArray buffer, int length) {
#ifndef TEST
  Byte number[8];
  buffer += ((length + 7) / 8);

  // Generate the random number in blocks of eight bytes (64 bits)
  while (length >= 64) {
    buffer -= 8;
    __push(buffer);
    __code(PRIM, PRIM_RANDOM);
    __code(STOREI, 8);
    length -= 64;
  }

  // Generate the remaining few bytes/bits
  if (length > 0) {
    buffer -= (length + 7) / 8;
    GetRandomNumber(number);
    number[0] &= 0xFF >> ((64 - length) % 8);
    memcpy(buffer, number, (length + 7) / 8);
  }
Exemple #2
0
 //! insert the address
 inline void push( T *pObj )
 {
     if( size_ >= maxi_ )
         grow( next_increase(maxi_) );
     __push( pObj );
 }
Exemple #3
0
int __expr_sy()
{
    int type;
    while (ptoken->type != TOKEN_INVALID) {
        DEBUG("get type: %d \n", ptoken->type);
        switch(ptoken->type) {
            case (TOKEN_INTEGER):
                memcpy(&sy_token_pool[sindex], ptoken, sizeof(struct __token__));
                sindex++;
                break;
            case (TOKEN_PLUS):
            case (TOKEN_MINUS):
            case (TOKEN_MUL):
            case (TOKEN_DIV):
                DEBUG("\n");
                type = __pop();

                if (type == -1) {
                    __push(ptoken->type);
                    break;
                }

                if (prio(type) >= prio(ptoken->type)) {
                    while (type >= ptoken->type) {
                        sy_token_pool[sindex].type = type;
                        type = __pop();
                        sindex++;
                    }
                    if (type != -1) {
                        __push(type);
                    }
                } else {
                    __push(type);
                    __push(ptoken->type);
                }

                break;
            case (TOKEN_LPAREN):
                __push(ptoken->type);
                break;
            case (TOKEN_RPAREN):
                type = __pop();
                while (type != TOKEN_LPAREN) {
                    sy_token_pool[sindex].type = type;
                    sindex++;
                    type = __pop();
                }
                break;

        }
        ptoken = get_next_token();
    }
    DEBUG("\n");
    type = __pop();
    while (type != -1) {
        sy_token_pool[sindex].type = type;
        type = __pop();
        sindex++;
    }

    return 0;
}