Skip to content

Padding returns unexpected results #85

@ionspin

Description

@ionspin

sodium_pad in libsodium is specified as:

int
sodium_pad(size_t *padded_buflen_p, unsigned char *buf,
           size_t unpadded_buflen, size_t blocksize, size_t max_buflen)

While in lazysodium it's

public native int sodium_pad(Pointer paddedBuffLen, char[] buf, int unpaddedBufLen, int blockSize, int maxBufLen);

The problem is caused by mismatch of char size in java and C, in C it's one byte, but in Java it's 2.

Modifying padding tests a bit demonstrates the problem

 @Test
    public void pad() {
        IntByReference ref = new IntByReference(0);
        char[] b = {'a','b','c','d'};

        lazySodium.sodiumPad(ref, b, 4, 4, 10);
        TestCase.assertEquals(8, ref.getValue());
    }

Results in

b
 0 = 'a' 97
 1 = 'b' 98
 2 = '\u0080' 128
 3 = '\u0000' 0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions