MD5 - set usedforsecurity-parameter for all uses (#5190)
This commit is contained in:
parent
8f8de3f342
commit
0fe30b0440
@ -1,5 +1,4 @@
|
|||||||
import datetime
|
import datetime
|
||||||
import hashlib
|
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
@ -31,6 +30,7 @@ from .utils import (
|
|||||||
PAGINATION_MODEL,
|
PAGINATION_MODEL,
|
||||||
)
|
)
|
||||||
from moto.utilities.paginator import paginate
|
from moto.utilities.paginator import paginate
|
||||||
|
from moto.utilities.utils import md5_hash
|
||||||
|
|
||||||
|
|
||||||
class UserStatus(str, enum.Enum):
|
class UserStatus(str, enum.Enum):
|
||||||
@ -595,11 +595,11 @@ class CognitoIdpUserPoolDomain(BaseModel):
|
|||||||
|
|
||||||
def _distribution_name(self):
|
def _distribution_name(self):
|
||||||
if self.custom_domain_config and "CertificateArn" in self.custom_domain_config:
|
if self.custom_domain_config and "CertificateArn" in self.custom_domain_config:
|
||||||
unique_hash = hashlib.md5(
|
unique_hash = md5_hash(
|
||||||
self.custom_domain_config["CertificateArn"].encode("utf-8")
|
self.custom_domain_config["CertificateArn"].encode("utf-8")
|
||||||
).hexdigest()
|
).hexdigest()
|
||||||
return f"{unique_hash[:16]}.cloudfront.net"
|
return f"{unique_hash[:16]}.cloudfront.net"
|
||||||
unique_hash = hashlib.md5(self.user_pool_id.encode("utf-8")).hexdigest()
|
unique_hash = md5_hash(self.user_pool_id.encode("utf-8")).hexdigest()
|
||||||
return f"{unique_hash[:16]}.amazoncognito.com"
|
return f"{unique_hash[:16]}.amazoncognito.com"
|
||||||
|
|
||||||
def to_json(self, extended=True):
|
def to_json(self, extended=True):
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import base64
|
import base64
|
||||||
import hashlib
|
|
||||||
import fnmatch
|
import fnmatch
|
||||||
import random
|
import random
|
||||||
import re
|
import re
|
||||||
@ -12,6 +11,7 @@ from cryptography.hazmat.primitives.asymmetric import rsa
|
|||||||
|
|
||||||
from moto.core import get_account_id
|
from moto.core import get_account_id
|
||||||
from moto.iam import iam_backends
|
from moto.iam import iam_backends
|
||||||
|
from moto.utilities.utils import md5_hash
|
||||||
|
|
||||||
EC2_RESOURCE_TO_PREFIX = {
|
EC2_RESOURCE_TO_PREFIX = {
|
||||||
"customer-gateway": "cgw",
|
"customer-gateway": "cgw",
|
||||||
@ -651,7 +651,7 @@ def rsa_public_key_fingerprint(rsa_public_key):
|
|||||||
encoding=serialization.Encoding.DER,
|
encoding=serialization.Encoding.DER,
|
||||||
format=serialization.PublicFormat.SubjectPublicKeyInfo,
|
format=serialization.PublicFormat.SubjectPublicKeyInfo,
|
||||||
)
|
)
|
||||||
fingerprint_hex = hashlib.md5(key_data).hexdigest()
|
fingerprint_hex = md5_hash(key_data).hexdigest()
|
||||||
fingerprint = re.sub(r"([a-f0-9]{2})(?!$)", r"\1:", fingerprint_hex)
|
fingerprint = re.sub(r"([a-f0-9]{2})(?!$)", r"\1:", fingerprint_hex)
|
||||||
return fingerprint
|
return fingerprint
|
||||||
|
|
||||||
|
@ -7,7 +7,6 @@ https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html
|
|||||||
import json
|
import json
|
||||||
import time
|
import time
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
from hashlib import md5
|
|
||||||
|
|
||||||
from moto.core import get_account_id, BaseBackend, BaseModel, CloudFormationModel
|
from moto.core import get_account_id, BaseBackend, BaseModel, CloudFormationModel
|
||||||
from moto.core.utils import (
|
from moto.core.utils import (
|
||||||
@ -32,6 +31,7 @@ from moto.efs.exceptions import (
|
|||||||
SecurityGroupLimitExceeded,
|
SecurityGroupLimitExceeded,
|
||||||
)
|
)
|
||||||
from moto.utilities.tagging_service import TaggingService
|
from moto.utilities.tagging_service import TaggingService
|
||||||
|
from moto.utilities.utils import md5_hash
|
||||||
|
|
||||||
|
|
||||||
def _lookup_az_id(az_name):
|
def _lookup_az_id(az_name):
|
||||||
@ -382,7 +382,7 @@ class EFSBackend(BaseBackend):
|
|||||||
if max_items < len(corpus):
|
if max_items < len(corpus):
|
||||||
new_corpus = corpus[max_items:]
|
new_corpus = corpus[max_items:]
|
||||||
new_corpus_dict = [c.info_json() for c in new_corpus]
|
new_corpus_dict = [c.info_json() for c in new_corpus]
|
||||||
new_hash = md5(json.dumps(new_corpus_dict).encode("utf-8"))
|
new_hash = md5_hash(json.dumps(new_corpus_dict).encode("utf-8"))
|
||||||
next_marker = new_hash.hexdigest()
|
next_marker = new_hash.hexdigest()
|
||||||
self.next_markers[next_marker] = new_corpus
|
self.next_markers[next_marker] = new_corpus
|
||||||
else:
|
else:
|
||||||
|
@ -4,6 +4,7 @@ import datetime
|
|||||||
|
|
||||||
from moto.core import get_account_id, BaseBackend, BaseModel
|
from moto.core import get_account_id, BaseBackend, BaseModel
|
||||||
from moto.core.utils import BackendDict
|
from moto.core.utils import BackendDict
|
||||||
|
from moto.utilities.utils import md5_hash
|
||||||
|
|
||||||
from .utils import get_job_id
|
from .utils import get_job_id
|
||||||
|
|
||||||
@ -117,7 +118,7 @@ class Vault(BaseModel):
|
|||||||
return d
|
return d
|
||||||
|
|
||||||
def create_archive(self, body, description):
|
def create_archive(self, body, description):
|
||||||
archive_id = hashlib.md5(body).hexdigest()
|
archive_id = md5_hash(body).hexdigest()
|
||||||
self.archives[archive_id] = {}
|
self.archives[archive_id] = {}
|
||||||
self.archives[archive_id]["archive_id"] = archive_id
|
self.archives[archive_id]["archive_id"] = archive_id
|
||||||
self.archives[archive_id]["body"] = body
|
self.archives[archive_id]["body"] = body
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import base64
|
import base64
|
||||||
import hashlib
|
|
||||||
import os
|
import os
|
||||||
import random
|
import random
|
||||||
import string
|
import string
|
||||||
@ -22,6 +21,7 @@ from moto.core.utils import (
|
|||||||
iso_8601_datetime_with_milliseconds,
|
iso_8601_datetime_with_milliseconds,
|
||||||
)
|
)
|
||||||
from moto.iam.policy_validation import IAMPolicyDocumentValidator
|
from moto.iam.policy_validation import IAMPolicyDocumentValidator
|
||||||
|
from moto.utilities.utils import md5_hash
|
||||||
|
|
||||||
from .aws_managed_policies import aws_managed_policies_data
|
from .aws_managed_policies import aws_managed_policies_data
|
||||||
from .exceptions import (
|
from .exceptions import (
|
||||||
@ -1014,7 +1014,7 @@ class SshPublicKey(BaseModel):
|
|||||||
self.user_name = user_name
|
self.user_name = user_name
|
||||||
self.ssh_public_key_body = ssh_public_key_body
|
self.ssh_public_key_body = ssh_public_key_body
|
||||||
self.ssh_public_key_id = "APKA" + random_access_key()
|
self.ssh_public_key_id = "APKA" + random_access_key()
|
||||||
self.fingerprint = hashlib.md5(ssh_public_key_body.encode()).hexdigest()
|
self.fingerprint = md5_hash(ssh_public_key_body.encode()).hexdigest()
|
||||||
self.status = "Active"
|
self.status = "Active"
|
||||||
self.upload_date = datetime.utcnow()
|
self.upload_date = datetime.utcnow()
|
||||||
|
|
||||||
|
@ -4,12 +4,12 @@ import re
|
|||||||
import itertools
|
import itertools
|
||||||
|
|
||||||
from operator import attrgetter
|
from operator import attrgetter
|
||||||
from hashlib import md5
|
|
||||||
|
|
||||||
from moto.core import BaseBackend, BaseModel, CloudFormationModel
|
from moto.core import BaseBackend, BaseModel, CloudFormationModel
|
||||||
from moto.core.utils import unix_time, BackendDict
|
from moto.core.utils import unix_time, BackendDict
|
||||||
from moto.core import get_account_id
|
from moto.core import get_account_id
|
||||||
from moto.utilities.paginator import paginate
|
from moto.utilities.paginator import paginate
|
||||||
|
from moto.utilities.utils import md5_hash
|
||||||
from .exceptions import (
|
from .exceptions import (
|
||||||
ConsumerNotFound,
|
ConsumerNotFound,
|
||||||
StreamNotFoundError,
|
StreamNotFoundError,
|
||||||
@ -363,7 +363,7 @@ class Stream(CloudFormationModel):
|
|||||||
raise InvalidArgumentError("explicit_hash_key")
|
raise InvalidArgumentError("explicit_hash_key")
|
||||||
|
|
||||||
else:
|
else:
|
||||||
key = int(md5(partition_key.encode("utf-8")).hexdigest(), 16)
|
key = int(md5_hash(partition_key.encode("utf-8")).hexdigest(), 16)
|
||||||
|
|
||||||
for shard in self.shards.values():
|
for shard in self.shards.values():
|
||||||
if shard.starting_hash <= key < shard.ending_hash:
|
if shard.starting_hash <= key < shard.ending_hash:
|
||||||
|
@ -2,7 +2,6 @@ import json
|
|||||||
import os
|
import os
|
||||||
import base64
|
import base64
|
||||||
import datetime
|
import datetime
|
||||||
import hashlib
|
|
||||||
import copy
|
import copy
|
||||||
import itertools
|
import itertools
|
||||||
import codecs
|
import codecs
|
||||||
@ -33,7 +32,7 @@ from moto.core.utils import (
|
|||||||
)
|
)
|
||||||
from moto.cloudwatch.models import MetricDatum
|
from moto.cloudwatch.models import MetricDatum
|
||||||
from moto.utilities.tagging_service import TaggingService
|
from moto.utilities.tagging_service import TaggingService
|
||||||
from moto.utilities.utils import LowercaseDict
|
from moto.utilities.utils import LowercaseDict, md5_hash
|
||||||
from moto.s3.exceptions import (
|
from moto.s3.exceptions import (
|
||||||
AccessDeniedByLock,
|
AccessDeniedByLock,
|
||||||
BucketAlreadyExists,
|
BucketAlreadyExists,
|
||||||
@ -213,7 +212,7 @@ class FakeKey(BaseModel):
|
|||||||
@property
|
@property
|
||||||
def etag(self):
|
def etag(self):
|
||||||
if self._etag is None:
|
if self._etag is None:
|
||||||
value_md5 = hashlib.md5()
|
value_md5 = md5_hash()
|
||||||
self._value_buffer.seek(0)
|
self._value_buffer.seek(0)
|
||||||
while True:
|
while True:
|
||||||
block = self._value_buffer.read(16 * 1024 * 1024) # read in 16MB chunks
|
block = self._value_buffer.read(16 * 1024 * 1024) # read in 16MB chunks
|
||||||
@ -376,7 +375,7 @@ class FakeMultipart(BaseModel):
|
|||||||
if count == 0:
|
if count == 0:
|
||||||
raise MalformedXML
|
raise MalformedXML
|
||||||
|
|
||||||
etag = hashlib.md5()
|
etag = md5_hash()
|
||||||
etag.update(bytes(md5s))
|
etag.update(bytes(md5s))
|
||||||
return total, "{0}-{1}".format(etag.hexdigest(), count)
|
return total, "{0}-{1}".format(etag.hexdigest(), count)
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ from moto.core.utils import (
|
|||||||
tags_from_cloudformation_tags_list,
|
tags_from_cloudformation_tags_list,
|
||||||
BackendDict,
|
BackendDict,
|
||||||
)
|
)
|
||||||
|
from moto.utilities.utils import md5_hash
|
||||||
from .utils import generate_receipt_handle
|
from .utils import generate_receipt_handle
|
||||||
from .exceptions import (
|
from .exceptions import (
|
||||||
MessageAttributesInvalid,
|
MessageAttributesInvalid,
|
||||||
@ -85,14 +86,14 @@ class Message(BaseModel):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def body_md5(self):
|
def body_md5(self):
|
||||||
md5 = hashlib.md5()
|
md5 = md5_hash()
|
||||||
md5.update(self._body.encode("utf-8"))
|
md5.update(self._body.encode("utf-8"))
|
||||||
return md5.hexdigest()
|
return md5.hexdigest()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def attribute_md5(self):
|
def attribute_md5(self):
|
||||||
|
|
||||||
md5 = hashlib.md5()
|
md5 = md5_hash()
|
||||||
|
|
||||||
for attrName in sorted(self.message_attributes.keys()):
|
for attrName in sorted(self.message_attributes.keys()):
|
||||||
self.validate_attribute_name(attrName)
|
self.validate_attribute_name(attrName)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import json
|
import json
|
||||||
|
import hashlib
|
||||||
import random
|
import random
|
||||||
import string
|
import string
|
||||||
import pkgutil
|
import pkgutil
|
||||||
@ -57,6 +58,19 @@ def filter_resources(resources, filters, attr_pairs):
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def md5_hash(data=None):
|
||||||
|
"""
|
||||||
|
MD5-hashing for non-security usecases.
|
||||||
|
Required for Moto to work in FIPS-enabled systems
|
||||||
|
"""
|
||||||
|
args = (data,) if data else ()
|
||||||
|
try:
|
||||||
|
return hashlib.md5(*args, usedforsecurity=False)
|
||||||
|
except TypeError:
|
||||||
|
# The usedforsecurity-parameter is only available as of Python 3.9
|
||||||
|
return hashlib.md5(*args)
|
||||||
|
|
||||||
|
|
||||||
class LowercaseDict(MutableMapping):
|
class LowercaseDict(MutableMapping):
|
||||||
"""A dictionary that lowercases all keys"""
|
"""A dictionary that lowercases all keys"""
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user