Skip to content

Commit 67220e3

Browse files
author
Rubtsov, Vasily
committed
Added the new SM2 encryption scheme, enabled building the IPP Crypto library with two more compilers, fixed potential security problems in several functions
1 parent c82c9b9 commit 67220e3

File tree

129 files changed

+5627
-745
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

129 files changed

+5627
-745
lines changed

.gitattributes

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Set the default behavior, in case people don't have core.autocrlf set.
2+
* text=auto
3+
4+
# Explicitly declare text files you want to always be normalized and converted
5+
# to native line endings on checkout.
6+
*.c text
7+
*.h text
8+
*.cpp text
9+
*.def text
10+
*.rc text
11+
*.i text
12+
*.sh text
13+
*.csh text
14+
*.mk text
15+
*.java text
16+
*.csv text
17+
*.lst text
18+
19+
# Declare files that will always have CRLF line endings on checkout.
20+
*.sln text eol=crlf
21+
*.bat text eol=crlf
22+
23+
# Denote all files that are truly binary and should not be modified.
24+
*.png binary
25+
*.jpg binary
26+
*.lib binary
27+
*.dll binary
28+
*.dylib binary
29+
*.so binary
30+
*.a binary
Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,24 @@
1-
# Intel(R) Integrated Performance Primitives Cryptography (Intel(R) IPP Cryptography)
2-
3-
This is a list of notable changes to Intel(R) IPP Cryptography, in reverse chronological order.
4-
5-
## 2018-08-30
6-
- Deprecated the ARCFour functionality.
7-
- Fixed a potential security problem in the signing functions over elliptic curves.
8-
- Fixed a potential security problem in the key expansion function for AES Encryption.
9-
- Fixed some of the compilation warnings observed when building the static dispatcher on Windows* OS.
10-
- Fixed minor issues with DLP functions.
11-
12-
13-
------------------------------------------------------------------------
14-
Intel is a trademark of Intel Corporation or its subsidiaries in the U.S. and/or other countries.
15-
* Other names and brands may be claimed as the property of others.
1+
# Intel(R) Integrated Performance Primitives Cryptography (Intel(R) IPP Cryptography)
2+
3+
This is a list of notable changes to Intel(R) IPP Cryptography, in reverse chronological order.
4+
5+
## 2018-10-15
6+
- Added the new SM2 encryption scheme.
7+
- Added the ability to build the Intel(R) IPP Cryptography library with the Microsoft* Visual C++ Compiler 2017.
8+
- Added the ability to build the Intel(R) IPP Cryptography library with the Intel(R) C++ Compiler 19.
9+
- Changed the range of the message being signed or verified by EC and DLP.
10+
- Fixed a potential security problem in the DLP signing and key generation functions.
11+
- Fixed a potential security problem in the AES-CTR cipher functions.
12+
- Fixed a potential security problem in the AES-GCM cipher functions.
13+
14+
## 2018-09-07
15+
- Deprecated the ARCFour functionality.
16+
- Fixed a potential security problem in the signing functions over elliptic curves.
17+
- Fixed a potential security problem in the key expansion function for AES Encryption.
18+
- Fixed some of the compilation warnings observed when building the static dispatcher on Windows* OS.
19+
- Fixed minor issues with DLP functions.
20+
21+
22+
------------------------------------------------------------------------
23+
Intel is a trademark of Intel Corporation or its subsidiaries in the U.S. and/or other countries.
24+
* Other names and brands may be claimed as the property of others.

README.md

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Intel(R) Integrated Performance Primitives Cryptography
1+
Intel(R) Integrated Performance Primitives Cryptography
22
=======================================================
33

44
Intel(R) Integrated Performance Primitives (Intel(R) IPP) Cryptography
@@ -60,19 +60,28 @@ only on the operating systems and tools listed below:
6060

6161
- Red Hat\* Enterprise Linux\* 6
6262

63-
- macOS\* 10.8\*
63+
- macOS\* 10.12\*
6464

6565
### C/C++\* Compilers for Windows\* OS:
6666

67-
Intel(R) C++ Compiler 18.0 for Windows\* OS
67+
- Intel(R) C++ Compiler 18.0 for Windows\* OS
68+
69+
- Intel(R) C++ Compiler 19.0 for Windows\* OS
70+
71+
- Microsoft Visual C++ Compiler\* version 14.14 or higher
72+
provided by Microsoft Visual Studio\* 2017 version 15.7 or higher
6873

6974
### C/C++\* Compilers for Linux\* OS:
7075

71-
Intel(R) C++ Compiler 18.0 for Linux\* OS
76+
- Intel(R) C++ Compiler 18.0 for Linux\* OS
77+
78+
- Intel(R) C++ Compiler 19.0 for Linux\* OS
7279

7380
### C/C++\* Compilers for macOS\*:
7481

75-
Intel(R) C++ Compiler 18.0 for OS X\*
82+
- Intel(R) C++ Compiler 18.0 for OS X\*
83+
84+
- Intel(R) C++ Compiler 19.0 for OS X\* OS
7685

7786
### Assembly Compilers for Windows\* OS:
7887

include/ippcp.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1159,6 +1159,8 @@ IPPAPI(IppStatus, ippsGFpECSetPointHash,(Ipp32u hdr, const Ipp8u* pMsg, int msgL
11591159
IPPAPI(IppStatus, ippsGFpECSetPointHash_rmf,(Ipp32u hdr, const Ipp8u* pMsg, int msgLen, IppsGFpECPoint* pPoint, IppsGFpECState* pEC, const IppsHashMethod* pMethod, Ipp8u* pScratchBuffer))
11601160
IPPAPI(IppStatus, ippsGFpECGetPoint,(const IppsGFpECPoint* pPoint, IppsGFpElement* pX, IppsGFpElement* pY, IppsGFpECState* pEC))
11611161
IPPAPI(IppStatus, ippsGFpECGetPointRegular,(const IppsGFpECPoint* pPoint, IppsBigNumState* pX, IppsBigNumState* pY, IppsGFpECState* pEC))
1162+
IPPAPI(IppStatus, ippsGFpECSetPointOctString,(const Ipp8u* pStr, int strLen, IppsGFpECPoint* pPoint, IppsGFpECState* pEC))
1163+
IPPAPI(IppStatus, ippsGFpECGetPointOctString,(const IppsGFpECPoint* pPoint, Ipp8u* pStr, int strLen, IppsGFpECState* pEC))
11621164

11631165
IPPAPI(IppStatus, ippsGFpECTstPoint,(const IppsGFpECPoint* pP, IppECResult* pResult, IppsGFpECState* pEC))
11641166
IPPAPI(IppStatus, ippsGFpECTstPointInSubgroup,(const IppsGFpECPoint* pP, IppECResult* pResult, IppsGFpECState* pEC, Ipp8u* pScratchBuffer))
@@ -1219,6 +1221,23 @@ IPPAPI(IppStatus, ippsGFpECVerifySM2,(const IppsBigNumState* pMsgDigest,
12191221
IppECResult* pResult,
12201222
IppsGFpECState* pEC, Ipp8u* pScratchBuffer))
12211223

1224+
IPPAPI(IppStatus, ippsGFpECESGetSize_SM2, (const IppsGFpECState* pEC, int* pSize))
1225+
IPPAPI(IppStatus, ippsGFpECESInit_SM2, (IppsGFpECState* pEC,
1226+
IppsECESState_SM2* pState, int avaliableCtxSize))
1227+
IPPAPI(IppStatus, ippsGFpECESSetKey_SM2, (const IppsBigNumState* pPrivate,
1228+
const IppsGFpECPoint* pPublic,
1229+
IppsECESState_SM2* pState,
1230+
IppsGFpECState* pEC,
1231+
Ipp8u* pEcScratchBuffer))
1232+
IPPAPI(IppStatus, ippsGFpECESStart_SM2, (IppsECESState_SM2* pState))
1233+
IPPAPI(IppStatus, ippsGFpECESEncrypt_SM2, (const Ipp8u* pInput, Ipp8u* pOutput,
1234+
int dataLen, IppsECESState_SM2* pState))
1235+
IPPAPI(IppStatus, ippsGFpECESDecrypt_SM2, (const Ipp8u* pInput, Ipp8u* pOutput,
1236+
int dataLen, IppsECESState_SM2* pState))
1237+
IPPAPI(IppStatus, ippsGFpECESFinal_SM2, (Ipp8u* pTag, int tagLen, IppsECESState_SM2* pState))
1238+
IPPAPI(IppStatus, ippsGFpECESGetBuffersSize_SM2, (int* pPublicKeySize,
1239+
int* pMaximumTagSize, const IppsECESState_SM2* pState))
1240+
12221241
#ifdef __cplusplus
12231242
}
12241243
#endif

include/ippcpdefs.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,7 @@ typedef struct _cpAES_CMAC IppsAES_CMACState;
550550
// Big Number Integer Arithmetic
551551
// =========================================================
552552
*/
553-
#define BN_MAXBITSIZE (32*1024) /* bn max size (bits) */
553+
#define BN_MAXBITSIZE (16*1024) /* bn max size (bits) */
554554

555555

556556
typedef enum {
@@ -783,6 +783,8 @@ typedef struct {
783783
int elementLen;
784784
} IppsGFpInfo;
785785

786+
typedef struct _cpStateECES_SM2 IppsECESState_SM2;
787+
786788
#endif /* !defined( _OWN_BLDPCS ) */
787789

788790
#ifndef _PCS

include/ippversion.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@
3838
* limitations under the License.
3939
*******************************************************************************/
4040

41-
/*
41+
/*
4242
// Intel(R) Integrated Performance Primitives (Intel(R) IPP)
4343
// Purpose: Describes the Intel(R) IPP version
44-
//
45-
//
44+
//
45+
//
4646
*/
4747

4848

@@ -51,8 +51,8 @@
5151

5252
#define IPP_VERSION_MAJOR 2019
5353
#define IPP_VERSION_MINOR 0
54-
#define IPP_VERSION_UPDATE 0
54+
#define IPP_VERSION_UPDATE 1
5555

56-
#define IPP_VERSION_STR "2019.0.0"
56+
#define IPP_VERSION_STR "2019.0.1 Gold"
5757

5858
#endif /* IPPVERSION_H__ */

sources/cmake/android/Intel18.0.0.cmake

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,18 +49,43 @@ set(CC_FLAGS_INLINE_ASM_UNIX_INTEL64 "-fasm-blocks -use_msasm -ffixed-rdi -ffixe
4949

5050
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS} ${LIBRARY_DEFINES}")
5151

52-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffreestanding -restrict -qopt-report2 -qopt-report-phase:vec -std=c99 -falign-functions=32 -falign-loops=32 -diag-error 266 -diag-disable 13366 -Wformat -Wformat-security -fstack-protector")
53-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -platform=android")
52+
# Ensures that compilation takes place in a freestanding environment
53+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffreestanding")
54+
# Determines whether pointer disambiguation is enabled with the restrict qualifier
55+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -restrict")
56+
# Tells the compiler to generate an optimization report
57+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -qopt-report2 -qopt-report-phase:vec")
58+
# Tells the compiler to align functions and loops.
59+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -falign-functions=32 -falign-loops=32")
60+
# Other flags
61+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -diag-error 266 -diag-disable 13366")
62+
63+
# Security Compiler flags
64+
65+
# Stack-based Buffer Overrun Detection
66+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector")
67+
68+
# Format string vulnerabilities
69+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wformat -Wformat-security")
70+
5471
if(NOT NONPIC_LIB)
72+
# Position Independent Execution (PIE)
5573
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fpic -fPIC")
5674
endif()
75+
76+
# Specifying a Target Platform as Android
77+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -platform=android")
78+
5779
if(THREADED_LIB)
5880
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -qopenmp -qopenmp-lib compat")
5981
endif()
6082
if(CODE_COVERAGE)
6183
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -prof-gen:srcpos -prof-dir ${PROF_DATA_DIR}")
6284
endif()
6385

86+
set (CMAKE_C_FLAGS_RELEASE " -O3 -DNDEBUG -w3" CACHE STRING "" FORCE)
87+
set (CMAKE_C_FLAGS_RELEASE_INIT " -O3 -DNDEBUG -w3" CACHE STRING "" FORCE)
88+
6489
if(${ARCH} MATCHES "ia32")
6590
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -no-sox -Zp16 -gcc -falign-stack=maintain-16-byte -Wa,--32 -no-use-asm -m32")
6691
else()
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
#===============================================================================
2+
# Copyright 2017-2018 Intel Corporation
3+
# All Rights Reserved.
4+
#
5+
# If this software was obtained under the Intel Simplified Software License,
6+
# the following terms apply:
7+
#
8+
# The source code, information and material ("Material") contained herein is
9+
# owned by Intel Corporation or its suppliers or licensors, and title to such
10+
# Material remains with Intel Corporation or its suppliers or licensors. The
11+
# Material contains proprietary information of Intel or its suppliers and
12+
# licensors. The Material is protected by worldwide copyright laws and treaty
13+
# provisions. No part of the Material may be used, copied, reproduced,
14+
# modified, published, uploaded, posted, transmitted, distributed or disclosed
15+
# in any way without Intel's prior express written permission. No license under
16+
# any patent, copyright or other intellectual property rights in the Material
17+
# is granted to or conferred upon you, either expressly, by implication,
18+
# inducement, estoppel or otherwise. Any license under such intellectual
19+
# property rights must be express and approved by Intel in writing.
20+
#
21+
# Unless otherwise agreed by Intel in writing, you may not remove or alter this
22+
# notice or any other notice embedded in Materials by Intel or Intel's
23+
# suppliers or licensors in any way.
24+
#
25+
#
26+
# If this software was obtained under the Apache License, Version 2.0 (the
27+
# "License"), the following terms apply:
28+
#
29+
# You may not use this file except in compliance with the License. You may
30+
# obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
31+
#
32+
#
33+
# Unless required by applicable law or agreed to in writing, software
34+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
35+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
36+
#
37+
# See the License for the specific language governing permissions and
38+
# limitations under the License.
39+
#===============================================================================
40+
41+
#
42+
# Intel(R) Integrated Performance Primitives (Intel(R) IPP) Cryptography
43+
#
44+
45+
# compiler
46+
set(CC_FLAGS_INLINE_ASM_UNIX_IA32 "-fasm-blocks -use_msasm -w -m32 -fomit-frame-pointer")
47+
48+
set(CC_FLAGS_INLINE_ASM_UNIX_INTEL64 "-fasm-blocks -use_msasm -ffixed-rdi -ffixed-rsi -ffixed-rbx -ffixed-rcx -ffixed-rdx -ffixed-rbp -ffixed-r8 -ffixed-r9 -ffixed-r12 -ffixed-r13 -ffixed-r14 -ffixed-r15")
49+
50+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS} ${LIBRARY_DEFINES}")
51+
52+
# Ensures that compilation takes place in a freestanding environment
53+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffreestanding")
54+
# Determines whether pointer disambiguation is enabled with the restrict qualifier
55+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -restrict")
56+
# Tells the compiler to generate an optimization report
57+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -qopt-report2 -qopt-report-phase:vec")
58+
# Tells the compiler to align functions and loops.
59+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -falign-functions=32 -falign-loops=32")
60+
# Other flags
61+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -diag-error 266 -diag-disable 13366")
62+
63+
# Security Compiler flags
64+
65+
# Stack-based Buffer Overrun Detection
66+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector")
67+
68+
# Format string vulnerabilities
69+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wformat -Wformat-security")
70+
71+
if(NOT NONPIC_LIB)
72+
# Position Independent Execution (PIE)
73+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fpic -fPIC")
74+
endif()
75+
76+
# Specifying a Target Platform as Android
77+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -platform=android")
78+
79+
if(THREADED_LIB)
80+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -qopenmp -qopenmp-lib compat")
81+
endif()
82+
if(CODE_COVERAGE)
83+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -prof-gen:srcpos -prof-dir ${PROF_DATA_DIR}")
84+
endif()
85+
86+
set (CMAKE_C_FLAGS_RELEASE " -O3 -DNDEBUG -w3" CACHE STRING "" FORCE)
87+
set (CMAKE_C_FLAGS_RELEASE_INIT " -O3 -DNDEBUG -w3" CACHE STRING "" FORCE)
88+
89+
if(${ARCH} MATCHES "ia32")
90+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -no-sox -Zp16 -gcc -falign-stack=maintain-16-byte -Wa,--32 -no-use-asm -m32")
91+
else()
92+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -no-sox -Zp16 -gcc")
93+
endif(${ARCH} MATCHES "ia32")
94+
95+
set(w7_opt "${w7_opt} -xSSE2")
96+
set(s8_opt "${s8_opt} -xATOM_SSSE3 -minstruction=nomovbe")
97+
set(p8_opt "${p8_opt} -xATOM_SSE4.2 -minstruction=nomovbe")
98+
set(g9_opt "${g9_opt} -xAVX")
99+
set(h9_opt "${h9_opt} -xCORE-AVX2")
100+
set(m7_opt "${m7_opt} -xSSE3")
101+
set(n8_opt "${n8_opt} -xATOM_SSSE3 -minstruction=nomovbe")
102+
set(y8_opt "${y8_opt} -xATOM_SSE4.2 -minstruction=nomovbe")
103+
set(e9_opt "${e9_opt} -xAVX")
104+
set(l9_opt "${l9_opt} -xCORE-AVX2")
105+
set(n0_opt "${n0_opt} -xMIC-AVX512")
106+
set(k0_opt "${k0_opt} -xCORE-AVX512")
107+
set(k0_opt "${k0_opt} -qopt-zmm-usage:high")

sources/cmake/linux/Intel18.0.0.cmake

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444

4545
# Linker flags
4646

47-
# Security flags
47+
# Security Linker flags
4848
set(LINK_FLAG_SECURITY "")
4949
# Disallows undefined symbols in object files. Undefined symbols in shared libraries are still allowed
5050
set(LINK_FLAG_SECURITY "${LINK_FLAG_SECURITY} -Wl,-z,defs")
@@ -68,9 +68,20 @@ set(CC_FLAGS_INLINE_ASM_UNIX_IA32 "-fasm-blocks -use_msasm -w -m32 -fomit-frame-
6868

6969
set(CC_FLAGS_INLINE_ASM_UNIX_INTEL64 "-fasm-blocks -use_msasm -ffixed-rdi -ffixed-rsi -ffixed-rbx -ffixed-rcx -ffixed-rdx -ffixed-rbp -ffixed-r8 -ffixed-r9 -ffixed-r12 -ffixed-r13 -ffixed-r14 -ffixed-r15")
7070

71-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS} ${LIBRARY_DEFINES}")
71+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${LIBRARY_DEFINES}")
7272

73-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffreestanding -restrict -qopt-report2 -qopt-report-phase:vec -std=c99 -falign-functions=32 -falign-loops=32 -diag-error 266 -diag-disable 13366")
73+
# Ensures that compilation takes place in a freestanding environment
74+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffreestanding")
75+
# Determines whether pointer disambiguation is enabled with the restrict qualifier
76+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -restrict")
77+
# Tells the compiler to generate an optimization report
78+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -qopt-report2 -qopt-report-phase:vec")
79+
# Tells the compiler to align functions and loops
80+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -falign-functions=32 -falign-loops=32")
81+
# Other flags
82+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -diag-error 266 -diag-disable 13366")
83+
84+
# Security Compiler flags
7485

7586
# Stack-based Buffer Overrun Detection
7687
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector")
@@ -89,8 +100,8 @@ if(CODE_COVERAGE)
89100
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -prof-gen:srcpos -prof-dir ${PROF_DATA_DIR}")
90101
endif()
91102

92-
set (CMAKE_C_FLAGS_RELEASE " -O3 -DNDEBUG" CACHE STRING "" FORCE)
93-
set (CMAKE_C_FLAGS_RELEASE_INIT " -O3 -DNDEBUG" CACHE STRING "" FORCE)
103+
set (CMAKE_C_FLAGS_RELEASE " -O3 -DNDEBUG -w3" CACHE STRING "" FORCE)
104+
set (CMAKE_C_FLAGS_RELEASE_INIT " -O3 -DNDEBUG -w3" CACHE STRING "" FORCE)
94105

95106
if(${ARCH} MATCHES "ia32")
96107
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -no-sox -Zp16 -gcc -falign-stack=maintain-16-byte -Wa,--32 -no-use-asm -m32")

0 commit comments

Comments
 (0)