Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions ports/nordic/mpconfigport.mk
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ CIRCUITPY_MEMORYMAP ?= 1
CIRCUITPY_RGBMATRIX ?= 1
CIRCUITPY_FRAMEBUFFERIO ?= 1

CIRCUITPY_HASHLIB ?= 1

CIRCUITPY_COUNTIO ?= 1
CIRCUITPY_WATCHDOG ?= 1

Expand Down
2 changes: 1 addition & 1 deletion shared-bindings/hashlib/__init__.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
//|
//| def new(name: str, data: bytes = b"") -> hashlib.Hash:
//| """Returns a Hash object setup for the named algorithm. Raises ValueError when the named
//| algorithm is unsupported.
//| algorithm is unsupported. Supported algorithms for ``name`` are ``'sha1`` and ``'sha256'``.
//|
//| :return: a hash object for the given algorithm
//| :rtype: hashlib.Hash"""
Expand Down
10 changes: 10 additions & 0 deletions shared-module/hashlib/Hash.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ void common_hal_hashlib_hash_update(hashlib_hash_obj_t *self, const uint8_t *dat
if (self->hash_type == MBEDTLS_SSL_HASH_SHA1) {
mbedtls_sha1_update_ret(&self->sha1, data, datalen);
return;
} else if (self->hash_type == MBEDTLS_SSL_HASH_SHA256) {
mbedtls_sha256_update_ret(&self->sha256, data, datalen);
return;
}
}

Expand All @@ -27,12 +30,19 @@ void common_hal_hashlib_hash_digest(hashlib_hash_obj_t *self, uint8_t *data, siz
mbedtls_sha1_clone(&copy, &self->sha1);
mbedtls_sha1_finish_ret(&self->sha1, data);
mbedtls_sha1_clone(&self->sha1, &copy);
} else if (self->hash_type == MBEDTLS_SSL_HASH_SHA256) {
mbedtls_sha256_context copy;
mbedtls_sha256_clone(&copy, &self->sha256);
mbedtls_sha256_finish_ret(&self->sha256, data);
mbedtls_sha256_clone(&self->sha256, &copy);
}
}

size_t common_hal_hashlib_hash_get_digest_size(hashlib_hash_obj_t *self) {
if (self->hash_type == MBEDTLS_SSL_HASH_SHA1) {
return 20;
} else if (self->hash_type == MBEDTLS_SSL_HASH_SHA256) {
return 32;
}
return 0;
}
2 changes: 2 additions & 0 deletions shared-module/hashlib/Hash.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@
#pragma once

#include "mbedtls/sha1.h"
#include "mbedtls/sha256.h"

typedef struct {
mp_obj_base_t base;
union {
mbedtls_sha1_context sha1;
mbedtls_sha256_context sha256;
};
// Of MBEDTLS_SSL_HASH_*
uint8_t hash_type;
Expand Down
5 changes: 5 additions & 0 deletions shared-module/hashlib/__init__.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@ bool common_hal_hashlib_new(hashlib_hash_obj_t *self, const char *algorithm) {
mbedtls_sha1_init(&self->sha1);
mbedtls_sha1_starts_ret(&self->sha1);
return true;
} else if (strcmp(algorithm, "sha256") == 0) {
self->hash_type = MBEDTLS_SSL_HASH_SHA256;
mbedtls_sha256_init(&self->sha256);
mbedtls_sha256_starts_ret(&self->sha256, 0);
return true;
}
return false;
}
5 changes: 5 additions & 0 deletions shared-module/hashlib/__init__.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,9 @@
#define mbedtls_sha1_starts_ret mbedtls_sha1_starts
#define mbedtls_sha1_update_ret mbedtls_sha1_update
#define mbedtls_sha1_finish_ret mbedtls_sha1_finish

#define mbedtls_sha256_starts_ret mbedtls_sha256_starts
#define mbedtls_sha256_update_ret mbedtls_sha256_update
#define mbedtls_sha256_finish_ret mbedtls_sha256_finish

#endif
Loading