Lines Matching refs:aa

508 big_add_abs(BIGNUM *result, BIGNUM *aa, BIGNUM *bb)
516 if (aa->len > bb->len) {
518 longer = aa->len;
519 longerarg = aa;
521 shorter = aa->len;
533 a = aa->value;
584 /* result=aa-bb it is assumed that aa>=bb */
586 big_sub_pos(BIGNUM *result, BIGNUM *aa, BIGNUM *bb)
593 if (aa->len > bb->len) {
596 shorter = aa->len;
598 if (result->size < aa->len) {
599 err = big_extend(result, aa->len);
606 a = aa->value;
608 result->len = aa->len;
619 for (; i < aa->len; i++) {
636 /* returns -1 if |aa|<|bb|, 0 if |aa|==|bb| 1 if |aa|>|bb| */
638 big_cmp_abs(BIGNUM *aa, BIGNUM *bb)
642 if (aa->len > bb->len) {
643 for (i = aa->len - 1; i > bb->len - 1; i--) {
644 if (aa->value[i] > 0) {
648 } else if (aa->len < bb->len) {
649 for (i = bb->len - 1; i > aa->len - 1; i--) {
655 i = aa->len - 1;
658 if (aa->value[i] > bb->value[i]) {
660 } else if (aa->value[i] < bb->value[i]) {
670 big_sub(BIGNUM *result, BIGNUM *aa, BIGNUM *bb)
674 if ((bb->sign == -1) && (aa->sign == 1)) {
675 if ((err = big_add_abs(result, aa, bb)) != BIG_OK) {
679 } else if ((aa->sign == -1) && (bb->sign == 1)) {
680 if ((err = big_add_abs(result, aa, bb)) != BIG_OK) {
684 } else if ((aa->sign == 1) && (bb->sign == 1)) {
685 if (big_cmp_abs(aa, bb) >= 0) {
686 if ((err = big_sub_pos(result, aa, bb)) != BIG_OK) {
691 if ((err = big_sub_pos(result, bb, aa)) != BIG_OK) {
697 if (big_cmp_abs(aa, bb) >= 0) {
698 if ((err = big_sub_pos(result, aa, bb)) != BIG_OK) {
703 if ((err = big_sub_pos(result, bb, aa)) != BIG_OK) {
714 big_add(BIGNUM *result, BIGNUM *aa, BIGNUM *bb)
718 if ((bb->sign == -1) && (aa->sign == -1)) {
719 if ((err = big_add_abs(result, aa, bb)) != BIG_OK) {
723 } else if ((aa->sign == 1) && (bb->sign == 1)) {
724 if ((err = big_add_abs(result, aa, bb)) != BIG_OK) {
728 } else if ((aa->sign == 1) && (bb->sign == -1)) {
729 if (big_cmp_abs(aa, bb) >= 0) {
730 if ((err = big_sub_pos(result, aa, bb)) != BIG_OK) {
735 if ((err = big_sub_pos(result, bb, aa)) != BIG_OK) {
741 if (big_cmp_abs(aa, bb) >= 0) {
742 if ((err = big_sub_pos(result, aa, bb)) != BIG_OK) {
747 if ((err = big_sub_pos(result, bb, aa)) != BIG_OK) {
757 /* result = aa/2 */
759 big_half_pos(BIGNUM *result, BIGNUM *aa)
766 if (result->size < aa->len) {
767 err = big_extend(result, aa->len);
773 result->len = aa->len;
774 a = aa->value;
777 for (i = aa->len - 1; i >= 0; i--) {
789 /* result = aa*2 */
791 big_double(BIGNUM *result, BIGNUM *aa)
798 if ((aa->len > 0) &&
799 ((aa->value[aa->len - 1] & BIG_CHUNK_HIGHBIT) != 0)) {
800 rsize = aa->len + 1;
802 rsize = aa->len;
811 a = aa->value;
813 if (rsize == aa->len + 1) {
817 for (i = 0; i < aa->len; i++) {
828 * returns aa mod b, aa must be nonneg, b must be a max
832 big_modhalf_pos(BIGNUM *aa, uint32_t b)
837 if (aa->len == 0) {
840 rem = aa->value[aa->len - 1] % b;
841 for (i = aa->len - 2; i >= 0; i--) {
843 (aa->value[i] >> (BIG_CHUNK_SIZE / 2))) % b;
845 (aa->value[i] & BIG_CHUNK_LOWHALFBITS)) % b;
853 * result = aa - (2^BIG_CHUNK_SIZE)^lendiff * bb
854 * result->size should be at least aa->len at entry
855 * aa, bb, and result should be positive
858 big_sub_pos_high(BIGNUM *result, BIGNUM *aa, BIGNUM *bb)
863 lendiff = aa->len - bb->len;
867 aa1.size = aa->size - lendiff;
868 aa1.value = aa->value + lendiff;
872 if (result->value != aa->value) {
874 result->value[i] = aa->value[i];
877 result->len = aa->len;
882 * returns 1, 0, or -1 depending on whether |aa| > , ==, or <
884 * aa->len should be >= bb->len
887 big_cmp_abs_high(BIGNUM *aa, BIGNUM *bb)
892 lendiff = aa->len - bb->len;
894 aa1.size = aa->size - lendiff;
896 aa1.value = aa->value + lendiff;
902 * result = aa * b where b is a max. (BIG_CHUNK_SIZE / 2)-bit positive integer.
906 big_mulhalf_low(BIGNUM *result, BIGNUM *aa, BIG_CHUNK_TYPE b)
912 a = aa->value;
915 for (i = 0; i < aa->len; i++) {
925 result->len = aa->len + 1;
926 result->sign = aa->sign;
931 * result = aa * b * 2^(BIG_CHUNK_SIZE / 2) where b is a max.
936 big_mulhalf_high(BIGNUM *result, BIGNUM *aa, BIG_CHUNK_TYPE b)
942 a = aa->value;
946 for (i = 0; i < aa->len; i++) {
956 result->len = aa->len + 1;
957 result->sign = aa->sign;
963 big_shiftleft(BIGNUM *result, BIGNUM *aa, int offs)
969 if (result != aa) {
970 (void) big_copy(result, aa);
975 for (i = 0; i < aa->len; i++) {
976 ai = aa->value[i];
981 result->len = aa->len + 1;
984 result->len = aa->len;
986 result->sign = aa->sign;
992 big_shiftright(BIGNUM *result, BIGNUM *aa, int offs)
998 if (result != aa) {
999 (void) big_copy(result, aa);
1003 cy = aa->value[0] >> offs;
1004 for (i = 1; i < aa->len; i++) {
1005 ai = aa->value[i];
1009 result->len = aa->len;
1011 result->sign = aa->sign;
1016 * result = aa/bb remainder = aa mod bb
1017 * it is assumed that aa and bb are positive
1020 big_div_pos(BIGNUM *result, BIGNUM *remainder, BIGNUM *aa, BIGNUM *bb)
1033 a = aa->value;
1035 alen = aa->len;
1040 aa->len = alen;
1049 if (big_cmp_abs(aa, bb) < 0) {
1051 ((err = big_copy(remainder, aa)) != BIG_OK)) {
1108 big_shiftleft(&tmp1, aa, offs);
1549 * result = aa * bb result->value should be big enough to hold the result
1555 big_mul(BIGNUM *result, BIGNUM *aa, BIGNUM *bb)
1563 if (aa == bb) {
1566 diff = big_cmp_abs(aa, bb);
1569 tt = aa;
1570 aa = bb;
1574 a = aa->value;
1576 alen = aa->len;
1581 aa->len = alen;
1594 /* aa or bb might be an alias to result */
1595 a = aa->value;
1606 sign = aa->sign * bb->sign;