Merge branch 'master' into prettier
This commit is contained in:
		
							
								
								
									
										6
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,2 +1,8 @@ | ||||
| **/node_modules | ||||
| .keys | ||||
| .zsign_cache/ | ||||
| db.* | ||||
| deps/ios_toolchain/ | ||||
| deps/openssl/ | ||||
| dist/ | ||||
| out | ||||
|   | ||||
							
								
								
									
										44
									
								
								GNUmakefile
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								GNUmakefile
									
									
									
									
									
								
							| @@ -824,18 +824,36 @@ fetchdeps: | ||||
| 	@test -f deps/prettier/html.mjs || curl -q --create-dirs -O --output-dir deps/prettier/ https://cdn.jsdelivr.net/npm/prettier@3.2.5/plugins/html.mjs | ||||
| 	@test -f deps/prettier/babel.mjs || curl -q --create-dirs -O --output-dir deps/prettier/ https://cdn.jsdelivr.net/npm/prettier@3.2.5/plugins/babel.mjs | ||||
| 	@test -f deps/prettier/estree.mjs || curl -q --create-dirs -O --output-dir deps/prettier/ https://cdn.jsdelivr.net/npm/prettier@3.2.5/plugins/estree.mjs | ||||
| .PHONE: fetchdeps | ||||
| .PHONY: fetchdeps | ||||
|  | ||||
| ANDROID_DEPS := deps/openssl/android/arm64-v8a/usr/local/lib/libssl.a | ||||
| $(ANDROID_DEPS): | ||||
| 	+@tools/ssl-android | ||||
| $(filter $(BUILD_DIR)/android%,$(APP_OBJS)): | $(ANDROID_DEPS) | ||||
|  | ||||
| ifeq ($(HAVE_WIN),1) | ||||
| WINDOWS_DEPS := deps/openssl/mingw64/usr/local/lib/libssl.a | ||||
| $(WINDOWS_DEPS): | ||||
| 	+@tools/ssl-mingw64 | ||||
| $(filter $(BUILD_DIR)/win%,$(APP_OBJS)): | $(WINDOWS_DEPS) | ||||
| endif | ||||
|  | ||||
| ifeq ($(UNAME_S),Darwin) | ||||
| IOS_DEPS := deps/openssl/ios/usr/local/lib/libssl.a | ||||
| $(IOS_DEPS): | ||||
| 	+@tools/ssl-ios | ||||
| $(filter $(BUILD_DIR)/ios%,$(APP_OBJS)): | $(IOS_DEPS) | ||||
| endif | ||||
|  | ||||
| clean: | ||||
| 	rm -rf $(BUILD_DIR) | ||||
| .PHONY: clean | ||||
|  | ||||
| dist: release-apk iosrelease-ipa | ||||
| 	@echo "[export] $$(svn info --show-item url)" | ||||
| 	@rm -rf tildefriends-$(VERSION_NUMBER) | ||||
| 	@svn export -q . tildefriends-$(VERSION_NUMBER) | ||||
| 	@echo "tildefriends-$(VERSION_NUMBER): $(VERSION_NAME)" > tildefriends-$(VERSION_NUMBER)/VERSION | ||||
| 	@echo "[tar] tildefriends-$(VERSION_NUMBER).tar.xz" | ||||
| 	@echo [archive] dist/tildefriends-$(VERSION_NUMBER).tar.xz | ||||
| 	@rm -rf out/tildefriends-$(VERSION_NUMBER) | ||||
| 	@mkdir -p dist/ out/tildefriends-$(VERSION_NUMBER) | ||||
| 	@git archive main | tar -x -C out/tildefriends-$(VERSION_NUMBER) | ||||
| 	@tar \ | ||||
| 		--exclude=apps/gg* \ | ||||
| 		--exclude=apps/welcome* \ | ||||
| @@ -852,14 +870,14 @@ dist: release-apk iosrelease-ipa | ||||
| 		--exclude=deps/sqlite/shell.c \ | ||||
| 		--exclude=deps/zlib/contrib/vstudio \ | ||||
| 		--exclude=deps/zlib/doc \ | ||||
| 		-caf tildefriends-$(VERSION_NUMBER).tar.xz tildefriends-$(VERSION_NUMBER) | ||||
| 	@rm -rf tildefriends-$(VERSION_NUMBER) | ||||
| 		-caf dist/tildefriends-$(VERSION_NUMBER).tar.xz out/tildefriends-$(VERSION_NUMBER) | ||||
| 	#@rm -rf out/tildefriends-$(VERSION_NUMBER) | ||||
| 	@echo "[cp] TildeFriends-x86-$(VERSION_NUMBER).apk" | ||||
| 	@cp out/TildeFriends-x86-release.apk TildeFriends-x86-$(VERSION_NUMBER).apk | ||||
| 	@cp out/TildeFriends-x86-release.apk dist/TildeFriends-x86-$(VERSION_NUMBER).apk | ||||
| 	@echo "[cp] TildeFriends-arm-$(VERSION_NUMBER).apk" | ||||
| 	@cp out/TildeFriends-arm-release.apk TildeFriends-arm-$(VERSION_NUMBER).apk | ||||
| 	@cp out/TildeFriends-arm-release.apk dist/TildeFriends-arm-$(VERSION_NUMBER).apk | ||||
| 	@echo "[cp] TildeFriends-$(VERSION_NUMBER).ipa" | ||||
| 	@cp out/tildefriends-release.ipa TildeFriends-$(VERSION_NUMBER).ipa | ||||
| 	@cp out/tildefriends-release.ipa dist/TildeFriends-$(VERSION_NUMBER).ipa | ||||
| .PHONY: dist | ||||
|  | ||||
| dist-test: dist | ||||
| @@ -872,3 +890,7 @@ dist-test: dist | ||||
| format: | ||||
| 	@clang-format -i $(wildcard src/*.c src/*.h src/*.m) | ||||
| .PHONY: format | ||||
|  | ||||
| docs: | ||||
| 	@doxygen | ||||
| .PHONY: docs | ||||
|   | ||||
							
								
								
									
										29
									
								
								core/app.js
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								core/app.js
									
									
									
									
									
								
							| @@ -6,20 +6,37 @@ let g_calls = {}; | ||||
|  | ||||
| let gSessionIndex = 0; | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @returns | ||||
|  */ | ||||
| function makeSessionId() { | ||||
| 	return (gSessionIndex++).toString(); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @returns | ||||
|  */ | ||||
| function App() { | ||||
| 	this._on_output = null; | ||||
| 	this._send_queue = []; | ||||
| 	return this; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} callback | ||||
|  */ | ||||
| App.prototype.readOutput = function (callback) { | ||||
| 	this._on_output = callback; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} api | ||||
|  * @returns | ||||
|  */ | ||||
| App.prototype.makeFunction = function (api) { | ||||
| 	let self = this; | ||||
| 	let result = function () { | ||||
| @@ -43,6 +60,10 @@ App.prototype.makeFunction = function (api) { | ||||
| 	return result; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} message | ||||
|  */ | ||||
| App.prototype.send = function (message) { | ||||
| 	if (this._send_queue) { | ||||
| 		if (this._on_output) { | ||||
| @@ -57,11 +78,17 @@ App.prototype.send = function (message) { | ||||
| 	} | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} request | ||||
|  * @param {*} response | ||||
|  * @param {*} client | ||||
|  */ | ||||
| function socket(request, response, client) { | ||||
| 	let process; | ||||
| 	let options = {}; | ||||
| 	let credentials = auth.query(request.headers); | ||||
| 	let refresh = auth.make_refresh(credentials); | ||||
| 	let refresh = auth.makeRefresh(credentials); | ||||
|  | ||||
| 	response.onClose = async function () { | ||||
| 		if (process && process.task) { | ||||
|   | ||||
							
								
								
									
										102
									
								
								core/auth.js
									
									
									
									
									
								
							
							
						
						
									
										102
									
								
								core/auth.js
									
									
									
									
									
								
							| @@ -5,9 +5,15 @@ let gDatabase = new Database('auth'); | ||||
|  | ||||
| const kRefreshInterval = 1 * 7 * 24 * 60 * 60 * 1000; | ||||
|  | ||||
| /** | ||||
|  * Makes a Base64 value URL safe | ||||
|  * @param {string} value | ||||
|  * @returns TODOC | ||||
|  */ | ||||
| function b64url(value) { | ||||
| 	value = value.replaceAll('+', '-').replaceAll('/', '_'); | ||||
| 	let equals = value.indexOf('='); | ||||
|  | ||||
| 	if (equals !== -1) { | ||||
| 		return value.substring(0, equals); | ||||
| 	} else { | ||||
| @@ -15,9 +21,15 @@ function b64url(value) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {string} value | ||||
|  * @returns | ||||
|  */ | ||||
| function unb64url(value) { | ||||
| 	value = value.replaceAll('-', '+').replaceAll('_', '/'); | ||||
| 	let remainder = value.length % 4; | ||||
|  | ||||
| 	if (remainder == 3) { | ||||
| 		return value + '='; | ||||
| 	} else if (remainder == 2) { | ||||
| @@ -27,16 +39,22 @@ function unb64url(value) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Creates a JSON Web Token | ||||
|  * @param {object} payload Object: {"name": "username"} | ||||
|  * @returns the JWT | ||||
|  */ | ||||
| function makeJwt(payload) { | ||||
| 	let ids = ssb.getIdentities(':auth'); | ||||
| 	const ids = ssb.getIdentities(':auth'); | ||||
| 	let id; | ||||
|  | ||||
| 	if (ids?.length) { | ||||
| 		id = ids[0]; | ||||
| 	} else { | ||||
| 		id = ssb.createIdentity(':auth'); | ||||
| 	} | ||||
|  | ||||
| 	let final_payload = b64url( | ||||
| 	const final_payload = b64url( | ||||
| 		base64Encode( | ||||
| 			JSON.stringify( | ||||
| 				Object.assign({}, payload, { | ||||
| @@ -45,7 +63,7 @@ function makeJwt(payload) { | ||||
| 			) | ||||
| 		) | ||||
| 	); | ||||
| 	let jwt = [ | ||||
| 	const jwt = [ | ||||
| 		b64url(base64Encode(JSON.stringify({alg: 'HS256', typ: 'JWT'}))), | ||||
| 		final_payload, | ||||
| 		b64url(ssb.hmacsha256sign(final_payload, ':auth', id)), | ||||
| @@ -53,17 +71,26 @@ function makeJwt(payload) { | ||||
| 	return jwt; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Validates a JWT ? | ||||
|  * @param {*} session TODOC | ||||
|  * @returns | ||||
|  */ | ||||
| function readSession(session) { | ||||
| 	let jwt_parts = session?.split('.'); | ||||
|  | ||||
| 	if (jwt_parts?.length === 3) { | ||||
| 		let [header, payload, signature] = jwt_parts; | ||||
| 		header = JSON.parse(utf8Decode(base64Decode(unb64url(header)))); | ||||
|  | ||||
| 		if (header.typ === 'JWT' && header.alg === 'HS256') { | ||||
| 			signature = unb64url(signature); | ||||
| 			let id = ssb.getIdentities(':auth'); | ||||
|  | ||||
| 			if (id?.length && ssb.hmacsha256verify(id[0], payload, signature)) { | ||||
| 				let result = JSON.parse(utf8Decode(base64Decode(unb64url(payload)))); | ||||
| 				let now = new Date().valueOf(); | ||||
| 				const result = JSON.parse(utf8Decode(base64Decode(unb64url(payload)))); | ||||
| 				const now = new Date().valueOf(); | ||||
|  | ||||
| 				if (now < result.exp) { | ||||
| 					print(`JWT valid for another ${(result.exp - now) / 1000} seconds.`); | ||||
| 					return result; | ||||
| @@ -79,15 +106,30 @@ function readSession(session) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Check the provided password matches the hash | ||||
|  * @param {string} password | ||||
|  * @param {string} hash bcrypt hash | ||||
|  * @returns true if the password matches the hash | ||||
|  */ | ||||
| function verifyPassword(password, hash) { | ||||
| 	return bCrypt.hashpw(password, hash) == hash; | ||||
| 	return bCrypt.hashpw(password, hash) === hash; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Hashes a password | ||||
|  * @param {string} password | ||||
|  * @returns {string} TODOC | ||||
|  */ | ||||
| function hashPassword(password) { | ||||
| 	let salt = bCrypt.gensalt(12); | ||||
| 	return bCrypt.hashpw(password, salt); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Check if there is an administrator on the instance | ||||
|  * @returns TODOC | ||||
|  */ | ||||
| function noAdministrator() { | ||||
| 	return ( | ||||
| 		!core.globalSettings || | ||||
| @@ -100,6 +142,10 @@ function noAdministrator() { | ||||
| 	); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Makes a user an administrator | ||||
|  * @param {string} name the user's name | ||||
|  */ | ||||
| function makeAdministrator(name) { | ||||
| 	if (!core.globalSettings.permissions) { | ||||
| 		core.globalSettings.permissions = {}; | ||||
| @@ -110,9 +156,15 @@ function makeAdministrator(name) { | ||||
| 	if (core.globalSettings.permissions[name].indexOf('administration') == -1) { | ||||
| 		core.globalSettings.permissions[name].push('administration'); | ||||
| 	} | ||||
|  | ||||
| 	core.setGlobalSettings(core.globalSettings); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} headers most likely an object | ||||
|  * @returns | ||||
|  */ | ||||
| function getCookies(headers) { | ||||
| 	let cookies = {}; | ||||
|  | ||||
| @@ -129,7 +181,13 @@ function getCookies(headers) { | ||||
| 	return cookies; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Validates a username | ||||
|  * @param {string} name | ||||
|  * @returns false | boolean[] ? | ||||
|  */ | ||||
| function isNameValid(name) { | ||||
| 	// TODO(tasiaiso): convert this into a regex | ||||
| 	let c = name.charAt(0); | ||||
| 	return ( | ||||
| 		((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) && | ||||
| @@ -144,8 +202,16 @@ function isNameValid(name) { | ||||
| 	); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Request handler ? | ||||
|  * @param {*} request TODOC | ||||
|  * @param {*} response | ||||
|  * @returns | ||||
|  */ | ||||
| function handler(request, response) { | ||||
| 	// TODO(tasiaiso): split this function | ||||
| 	let session = getCookies(request.headers).session; | ||||
|  | ||||
| 	if (request.uri == '/login') { | ||||
| 		let formData = form.decodeForm(request.query); | ||||
| 		if (query(request.headers)?.permissions?.authenticated) { | ||||
| @@ -285,6 +351,11 @@ function handler(request, response) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Gets a user's permissions based on it's session ? | ||||
|  * @param {*} session TODOC | ||||
|  * @returns | ||||
|  */ | ||||
| function getPermissions(session) { | ||||
| 	let permissions; | ||||
| 	let entry = readSession(session); | ||||
| @@ -295,6 +366,11 @@ function getPermissions(session) { | ||||
| 	return permissions || {}; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Get a user's permissions ? | ||||
|  * @param {string} userName TODOC | ||||
|  * @returns | ||||
|  */ | ||||
| function getPermissionsForUser(userName) { | ||||
| 	let permissions = {}; | ||||
| 	if ( | ||||
| @@ -309,6 +385,11 @@ function getPermissionsForUser(userName) { | ||||
| 	return permissions; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} headers | ||||
|  * @returns | ||||
|  */ | ||||
| function query(headers) { | ||||
| 	let session = getCookies(headers).session; | ||||
| 	let entry; | ||||
| @@ -323,7 +404,12 @@ function query(headers) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| function make_refresh(credentials) { | ||||
| /** | ||||
|  * Refreshes a JWT ? | ||||
|  * @param {*} credentials TODOC | ||||
|  * @returns | ||||
|  */ | ||||
| function makeRefresh(credentials) { | ||||
| 	if (credentials?.session?.name) { | ||||
| 		return { | ||||
| 			token: makeJwt({name: credentials.session.name}), | ||||
| @@ -332,4 +418,4 @@ function make_refresh(credentials) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| export {handler, query, make_refresh}; | ||||
| export {handler, query, makeRefresh}; | ||||
|   | ||||
							
								
								
									
										269
									
								
								core/client.js
									
									
									
									
									
								
							
							
						
						
									
										269
									
								
								core/client.js
									
									
									
									
									
								
							| @@ -12,7 +12,7 @@ let gOriginalInput; | ||||
| let kErrorColor = '#dc322f'; | ||||
| let kStatusColor = '#fff'; | ||||
|  | ||||
| /* Functions that server-side app code can call through the app object. */ | ||||
| // Functions that server-side app code can call through the app object. | ||||
| const k_api = { | ||||
| 	setDocument: {args: ['content'], func: api_setDocument}, | ||||
| 	postMessage: {args: ['message'], func: api_postMessage}, | ||||
| @@ -24,6 +24,7 @@ const k_api = { | ||||
| 	setHash: {args: ['hash'], func: api_setHash}, | ||||
| }; | ||||
|  | ||||
| // TODO(tasiaiso): this is only used once, move it down ? | ||||
| const k_global_style = css` | ||||
| 	a:link { | ||||
| 		color: #268bd2; | ||||
| @@ -42,6 +43,9 @@ const k_global_style = css` | ||||
| 	} | ||||
| `; | ||||
|  | ||||
| /** | ||||
|  * Class that represents the top bar | ||||
|  */ | ||||
| class TfNavigationElement extends LitElement { | ||||
| 	static get properties() { | ||||
| 		return { | ||||
| @@ -63,6 +67,10 @@ class TfNavigationElement extends LitElement { | ||||
| 		this.spark_lines = {}; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * TODOC | ||||
| 	 * @param {*} event | ||||
| 	 */ | ||||
| 	toggle_edit(event) { | ||||
| 		event.preventDefault(); | ||||
| 		if (editing()) { | ||||
| @@ -72,10 +80,20 @@ class TfNavigationElement extends LitElement { | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * TODOC | ||||
| 	 * @param {*} key | ||||
| 	 */ | ||||
| 	reset_permission(key) { | ||||
| 		send({action: 'resetPermission', permission: key}); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * TODOC | ||||
| 	 * @param {*} key | ||||
| 	 * @param {*} options | ||||
| 	 * @returns | ||||
| 	 */ | ||||
| 	get_spark_line(key, options) { | ||||
| 		if (!this.spark_lines[key]) { | ||||
| 			let spark_line = document.createElement('tf-sparkline'); | ||||
| @@ -94,6 +112,10 @@ class TfNavigationElement extends LitElement { | ||||
| 		return this.spark_lines[key]; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * TODOC | ||||
| 	 * @returns | ||||
| 	 */ | ||||
| 	render_login() { | ||||
| 		if (this?.credentials?.session?.name) { | ||||
| 			return html`<a id="login" href="/login/logout?return=${url() + hash()}" | ||||
| @@ -106,6 +128,10 @@ class TfNavigationElement extends LitElement { | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * TODOC | ||||
| 	 * @returns | ||||
| 	 */ | ||||
| 	render_permissions() { | ||||
| 		if (this.show_permissions) { | ||||
| 			return html` | ||||
| @@ -137,6 +163,10 @@ class TfNavigationElement extends LitElement { | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * TODOC | ||||
| 	 * @returns | ||||
| 	 */ | ||||
| 	render() { | ||||
| 		let self = this; | ||||
| 		return html` | ||||
| @@ -230,8 +260,12 @@ class TfNavigationElement extends LitElement { | ||||
| 		`; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| customElements.define('tf-navigation', TfNavigationElement); | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  */ | ||||
| class TfFilesElement extends LitElement { | ||||
| 	static get properties() { | ||||
| 		return { | ||||
| @@ -247,6 +281,10 @@ class TfFilesElement extends LitElement { | ||||
| 		this.dropping = 0; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * TODOC | ||||
| 	 * @param {*} file | ||||
| 	 */ | ||||
| 	file_click(file) { | ||||
| 		this.dispatchEvent( | ||||
| 			new CustomEvent('file_click', { | ||||
| @@ -259,6 +297,11 @@ class TfFilesElement extends LitElement { | ||||
| 		); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * TODOC | ||||
| 	 * @param {*} file | ||||
| 	 * @returns | ||||
| 	 */ | ||||
| 	render_file(file) { | ||||
| 		let classes = ['file']; | ||||
| 		if (file == this.current) { | ||||
| @@ -275,6 +318,10 @@ class TfFilesElement extends LitElement { | ||||
| 		</div>`; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * TODOC | ||||
| 	 * @param {*} event | ||||
| 	 */ | ||||
| 	async drop(event) { | ||||
| 		event.preventDefault(); | ||||
| 		event.stopPropagation(); | ||||
| @@ -296,15 +343,27 @@ class TfFilesElement extends LitElement { | ||||
| 		updateFiles(); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * TODOC | ||||
| 	 * @param {*} event | ||||
| 	 */ | ||||
| 	drag_enter(event) { | ||||
| 		this.dropping++; | ||||
| 		event.preventDefault(); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * TODOC | ||||
| 	 * @param {*} event | ||||
| 	 */ | ||||
| 	drag_leave(event) { | ||||
| 		this.dropping--; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * TODOC | ||||
| 	 * @returns | ||||
| 	 */ | ||||
| 	render() { | ||||
| 		let self = this; | ||||
| 		return html` | ||||
| @@ -350,8 +409,12 @@ class TfFilesElement extends LitElement { | ||||
| 		`; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| customElements.define('tf-files', TfFilesElement); | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  */ | ||||
| class TfFilesPaneElement extends LitElement { | ||||
| 	static get properties() { | ||||
| 		return { | ||||
| @@ -367,11 +430,19 @@ class TfFilesPaneElement extends LitElement { | ||||
| 		this.files = {}; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * TODOC | ||||
| 	 * @param {*} expanded | ||||
| 	 */ | ||||
| 	set_expanded(expanded) { | ||||
| 		this.expanded = expanded; | ||||
| 		window.localStorage.setItem('files', expanded ? '1' : '0'); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * TODOC | ||||
| 	 * @returns | ||||
| 	 */ | ||||
| 	render() { | ||||
| 		let self = this; | ||||
| 		let expander = this.expanded | ||||
| @@ -425,8 +496,12 @@ class TfFilesPaneElement extends LitElement { | ||||
| 		`; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| customElements.define('tf-files-pane', TfFilesPaneElement); | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  */ | ||||
| class TfSparkLineElement extends LitElement { | ||||
| 	static get properties() { | ||||
| 		return { | ||||
| @@ -444,6 +519,11 @@ class TfSparkLineElement extends LitElement { | ||||
| 		this.k_values_max = 100; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * TODOC | ||||
| 	 * @param {*} key | ||||
| 	 * @param {*} value | ||||
| 	 */ | ||||
| 	append(key, value) { | ||||
| 		let line = null; | ||||
| 		for (let it of this.lines) { | ||||
| @@ -468,6 +548,11 @@ class TfSparkLineElement extends LitElement { | ||||
| 		this.requestUpdate(); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * TODOC | ||||
| 	 * @param {*} line | ||||
| 	 * @returns | ||||
| 	 */ | ||||
| 	render_line(line) { | ||||
| 		if (line?.values?.length >= 2) { | ||||
| 			let max = Math.max(this.max, ...line.values); | ||||
| @@ -481,6 +566,10 @@ class TfSparkLineElement extends LitElement { | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * TODOC | ||||
| 	 * @returns | ||||
| 	 */ | ||||
| 	render() { | ||||
| 		let max = | ||||
| 			Math.round( | ||||
| @@ -503,8 +592,10 @@ class TfSparkLineElement extends LitElement { | ||||
| 		`; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| customElements.define('tf-sparkline', TfSparkLineElement); | ||||
|  | ||||
| // TODOC | ||||
| window.addEventListener('keydown', function (event) { | ||||
| 	if (event.keyCode == 83 && (event.altKey || event.ctrlKey)) { | ||||
| 		if (editing()) { | ||||
| @@ -519,6 +610,12 @@ window.addEventListener('keydown', function (event) { | ||||
| 	} | ||||
| }); | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} nodes | ||||
|  * @param {*} callback | ||||
|  * @returns | ||||
|  */ | ||||
| function ensureLoaded(nodes, callback) { | ||||
| 	if (!nodes.length) { | ||||
| 		callback(); | ||||
| @@ -559,14 +656,26 @@ function ensureLoaded(nodes, callback) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @returns | ||||
|  */ | ||||
| function editing() { | ||||
| 	return document.getElementById('editPane').style.display != 'none'; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @returns | ||||
|  */ | ||||
| function is_edit_only() { | ||||
| 	return window.location.search == '?editonly=1' || window.innerWidth < 1024; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @returns | ||||
|  */ | ||||
| async function edit() { | ||||
| 	if (editing()) { | ||||
| 		return; | ||||
| @@ -591,10 +700,18 @@ async function edit() { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  */ | ||||
| function trace() { | ||||
| 	window.open(`/speedscope/#profileURL=${encodeURIComponent('/trace')}`); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} name | ||||
|  * @returns | ||||
|  */ | ||||
| function guessMode(name) { | ||||
| 	return name.endsWith('.js') | ||||
| 		? 'javascript' | ||||
| @@ -603,6 +720,12 @@ function guessMode(name) { | ||||
| 			: null; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} name | ||||
|  * @param {*} id | ||||
|  * @returns | ||||
|  */ | ||||
| function loadFile(name, id) { | ||||
| 	return fetch('/' + id + '/view') | ||||
| 		.then(function (response) { | ||||
| @@ -626,6 +749,11 @@ function loadFile(name, id) { | ||||
| 		}); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} path | ||||
|  * @returns | ||||
|  */ | ||||
| async function load(path) { | ||||
| 	let response = await fetch((path || url()) + 'view'); | ||||
| 	let json; | ||||
| @@ -663,16 +791,28 @@ async function load(path) { | ||||
| 	return Promise.all(promises); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  */ | ||||
| function closeEditor() { | ||||
| 	window.localStorage.setItem('editing', '0'); | ||||
| 	document.getElementById('editPane').style.display = 'none'; | ||||
| 	document.getElementById('viewPane').style.display = 'flex'; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @returns | ||||
|  */ | ||||
| function explodePath() { | ||||
| 	return /^\/~([^\/]+)\/([^\/]+)(.*)/.exec(window.location.pathname); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} save_to | ||||
|  * @returns | ||||
|  */ | ||||
| function save(save_to) { | ||||
| 	document.getElementById('save').disabled = true; | ||||
| 	if (gCurrentFile) { | ||||
| @@ -778,6 +918,9 @@ function save(save_to) { | ||||
| 		}); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  */ | ||||
| function changeIcon() { | ||||
| 	let value = prompt('Enter a new app icon emoji:'); | ||||
| 	if (value !== undefined) { | ||||
| @@ -786,6 +929,9 @@ function changeIcon() { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  */ | ||||
| function deleteApp() { | ||||
| 	let name = document.getElementById('name'); | ||||
| 	let path = name && name.value ? name.value : url(); | ||||
| @@ -804,6 +950,10 @@ function deleteApp() { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @returns | ||||
|  */ | ||||
| function url() { | ||||
| 	let hash = window.location.href.indexOf('#'); | ||||
| 	let question = window.location.href.indexOf('?'); | ||||
| @@ -819,20 +969,36 @@ function url() { | ||||
| 		: window.location.href; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @returns | ||||
|  */ | ||||
| function hash() { | ||||
| 	return window.location.hash != '#' ? window.location.hash : ''; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} content | ||||
|  */ | ||||
| function api_setDocument(content) { | ||||
| 	let iframe = document.getElementById('document'); | ||||
| 	iframe.srcdoc = content; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} message | ||||
|  */ | ||||
| function api_postMessage(message) { | ||||
| 	let iframe = document.getElementById('document'); | ||||
| 	iframe.contentWindow.postMessage(message, '*'); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} error | ||||
|  */ | ||||
| function api_error(error) { | ||||
| 	if (error) { | ||||
| 		if (typeof error == 'string') { | ||||
| @@ -844,14 +1010,30 @@ function api_error(error) { | ||||
| 	console.log('error', error); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} key | ||||
|  * @param {*} value | ||||
|  */ | ||||
| function api_localStorageSet(key, value) { | ||||
| 	window.localStorage.setItem('app:' + key, value); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} key | ||||
|  * @returns | ||||
|  */ | ||||
| function api_localStorageGet(key) { | ||||
| 	return window.localStorage.getItem('app:' + key); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} permission | ||||
|  * @param {*} id | ||||
|  * @returns | ||||
|  */ | ||||
| function api_requestPermission(permission, id) { | ||||
| 	let outer = document.createElement('div'); | ||||
| 	outer.classList.add('permissions'); | ||||
| @@ -917,14 +1099,25 @@ function api_requestPermission(permission, id) { | ||||
| 	}); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  */ | ||||
| function api_print() { | ||||
| 	console.log('app>', ...arguments); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} hash | ||||
|  */ | ||||
| function api_setHash(hash) { | ||||
| 	window.location.hash = hash; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} message | ||||
|  */ | ||||
| function _receive_websocket_message(message) { | ||||
| 	if (message && message.action == 'session') { | ||||
| 		setStatusMessage('🟢 Executing...', kStatusColor); | ||||
| @@ -1011,6 +1204,11 @@ function _receive_websocket_message(message) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} message | ||||
|  * @param {*} color | ||||
|  */ | ||||
| function setStatusMessage(message, color) { | ||||
| 	document.getElementsByTagName('tf-navigation')[0].status = { | ||||
| 		message: message, | ||||
| @@ -1018,6 +1216,10 @@ function setStatusMessage(message, color) { | ||||
| 	}; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} value | ||||
|  */ | ||||
| function send(value) { | ||||
| 	try { | ||||
| 		if (gSocket && gSocket.readyState == gSocket.OPEN) { | ||||
| @@ -1028,6 +1230,13 @@ function send(value) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} sourceData | ||||
|  * @param {*} maxWidth | ||||
|  * @param {*} maxHeight | ||||
|  * @param {*} callback | ||||
|  */ | ||||
| function fixImage(sourceData, maxWidth, maxHeight, callback) { | ||||
| 	let result = sourceData; | ||||
| 	let image = new Image(); | ||||
| @@ -1054,16 +1263,26 @@ function fixImage(sourceData, maxWidth, maxHeight, callback) { | ||||
| 	image.src = sourceData; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} image | ||||
|  */ | ||||
| function sendImage(image) { | ||||
| 	fixImage(image, 320, 240, function (result) { | ||||
| 		send({image: result}); | ||||
| 	}); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  */ | ||||
| function hashChange() { | ||||
| 	send({event: 'hashChange', hash: window.location.hash}); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  */ | ||||
| function focus() { | ||||
| 	if (gSocket && gSocket.readyState == gSocket.CLOSED) { | ||||
| 		connectSocket(); | ||||
| @@ -1072,12 +1291,19 @@ function focus() { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  */ | ||||
| function blur() { | ||||
| 	if (gSocket && gSocket.readyState == gSocket.OPEN) { | ||||
| 		send({event: 'blur'}); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} event | ||||
|  */ | ||||
| function message(event) { | ||||
| 	if ( | ||||
| 		event.data && | ||||
| @@ -1123,6 +1349,10 @@ function message(event) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} path | ||||
|  */ | ||||
| function reconnect(path) { | ||||
| 	let oldSocket = gSocket; | ||||
| 	gSocket = null; | ||||
| @@ -1135,6 +1365,10 @@ function reconnect(path) { | ||||
| 	connectSocket(path); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} path | ||||
|  */ | ||||
| function connectSocket(path) { | ||||
| 	if (!gSocket || gSocket.readyState != gSocket.OPEN) { | ||||
| 		if (gSocket) { | ||||
| @@ -1194,6 +1428,10 @@ function connectSocket(path) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} name | ||||
|  */ | ||||
| function openFile(name) { | ||||
| 	let newDoc = | ||||
| 		name && gFiles[name] | ||||
| @@ -1216,6 +1454,9 @@ function openFile(name) { | ||||
| 	gEditor.focus(); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  */ | ||||
| function updateFiles() { | ||||
| 	let files = document.getElementsByTagName('tf-files-pane')[0]; | ||||
| 	if (files) { | ||||
| @@ -1235,6 +1476,10 @@ function updateFiles() { | ||||
| 	gEditor.focus(); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} name | ||||
|  */ | ||||
| function makeNewFile(name) { | ||||
| 	gFiles[name] = { | ||||
| 		doc: cm6.EditorState.create({extensions: cm6.extensions}), | ||||
| @@ -1242,6 +1487,9 @@ function makeNewFile(name) { | ||||
| 	openFile(name); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  */ | ||||
| function newFile() { | ||||
| 	let name = prompt('Name of new file:', 'file.js'); | ||||
| 	if (name && !gFiles[name]) { | ||||
| @@ -1249,6 +1497,9 @@ function newFile() { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  */ | ||||
| function removeFile() { | ||||
| 	if (confirm('Remove ' + gCurrentFile + '?')) { | ||||
| 		delete gFiles[gCurrentFile]; | ||||
| @@ -1256,6 +1507,9 @@ function removeFile() { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  */ | ||||
| async function appExport() { | ||||
| 	let JsZip = (await import('/static/jszip.min.js')).default; | ||||
| 	let owner = window.location.pathname.split('/')[1].replace('~', ''); | ||||
| @@ -1284,6 +1538,12 @@ async function appExport() { | ||||
| 	a.click(); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} name | ||||
|  * @param {*} file | ||||
|  * @returns | ||||
|  */ | ||||
| async function save_file_to_blob_id(name, file) { | ||||
| 	console.log(`Saving ${name}.`); | ||||
| 	let response = await fetch('/save', { | ||||
| @@ -1305,6 +1565,9 @@ async function save_file_to_blob_id(name, file) { | ||||
| 	return blob_id; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  */ | ||||
| async function appImport() { | ||||
| 	let JsZip = (await import('/static/jszip.min.js')).default; | ||||
| 	let input = document.createElement('input'); | ||||
| @@ -1373,6 +1636,9 @@ async function appImport() { | ||||
| 	}; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * | ||||
|  */ | ||||
| async function sourcePretty() { | ||||
| 	let prettier = (await import('/prettier/standalone.mjs')).default; | ||||
| 	let babel = (await import('/prettier/babel.mjs')).default; | ||||
| @@ -1394,6 +1660,7 @@ async function sourcePretty() { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // TODOC | ||||
| window.addEventListener('load', function () { | ||||
| 	window.addEventListener('hashchange', hashChange); | ||||
| 	window.addEventListener('focus', focus); | ||||
|   | ||||
							
								
								
									
										134
									
								
								core/core.js
									
									
									
									
									
								
							
							
						
						
									
										134
									
								
								core/core.js
									
									
									
									
									
								
							| @@ -103,6 +103,11 @@ let gGlobalSettings = { | ||||
|  | ||||
| let kPingInterval = 60 * 1000; | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} out | ||||
|  * @param {*} error | ||||
|  */ | ||||
| function printError(out, error) { | ||||
| 	if (error.stackTrace) { | ||||
| 		out.print(error.fileName + ':' + error.lineNumber + ': ' + error.message); | ||||
| @@ -115,6 +120,12 @@ function printError(out, error) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} handlers | ||||
|  * @param {*} argv | ||||
|  * @returns | ||||
|  */ | ||||
| function invoke(handlers, argv) { | ||||
| 	let promises = []; | ||||
| 	if (handlers) { | ||||
| @@ -135,6 +146,12 @@ function invoke(handlers, argv) { | ||||
| 	return Promise.all(promises); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} eventName | ||||
|  * @param {*} argv | ||||
|  * @returns | ||||
|  */ | ||||
| function broadcastEvent(eventName, argv) { | ||||
| 	let promises = []; | ||||
| 	for (let process of Object.values(gProcesses)) { | ||||
| @@ -144,7 +161,11 @@ function broadcastEvent(eventName, argv) { | ||||
| 	} | ||||
| 	return Promise.all(promises); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} message | ||||
|  * @returns | ||||
|  */ | ||||
| function broadcast(message) { | ||||
| 	let sender = this; | ||||
| 	let promises = []; | ||||
| @@ -161,6 +182,12 @@ function broadcast(message) { | ||||
| 	return Promise.all(promises); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} caller | ||||
|  * @param {*} process | ||||
|  * @returns | ||||
|  */ | ||||
| function getUser(caller, process) { | ||||
| 	return { | ||||
| 		key: process.key, | ||||
| @@ -171,6 +198,12 @@ function getUser(caller, process) { | ||||
| 	}; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} user | ||||
|  * @param {*} process | ||||
|  * @returns | ||||
|  */ | ||||
| function getApps(user, process) { | ||||
| 	if ( | ||||
| 		process.credentials && | ||||
| @@ -195,12 +228,26 @@ function getApps(user, process) { | ||||
| 	return {}; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} from | ||||
|  * @param {*} to | ||||
|  * @param {*} message | ||||
|  * @returns | ||||
|  */ | ||||
| function postMessageInternal(from, to, message) { | ||||
| 	if (to.eventHandlers['message']) { | ||||
| 		return invoke(to.eventHandlers['message'], [getUser(from, from), message]); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} blobId | ||||
|  * @param {*} session | ||||
|  * @param {*} options | ||||
|  * @returns | ||||
|  */ | ||||
| async function getSessionProcessBlob(blobId, session, options) { | ||||
| 	let actualOptions = {timeout: kPingInterval}; | ||||
| 	if (options) { | ||||
| @@ -211,7 +258,15 @@ async function getSessionProcessBlob(blobId, session, options) { | ||||
| 	return getProcessBlob(blobId, 'session_' + session, actualOptions); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} blobId | ||||
|  * @param {*} key | ||||
|  * @param {*} options | ||||
|  * @returns | ||||
|  */ | ||||
| async function getProcessBlob(blobId, key, options) { | ||||
| 	// TODO(tasiaiso): break this down ? | ||||
| 	let process = gProcesses[key]; | ||||
| 	if (!process && !(options && 'create' in options && !options.create)) { | ||||
| 		let resolveReady; | ||||
| @@ -678,6 +733,11 @@ async function getProcessBlob(blobId, key, options) { | ||||
| 	return process; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} settings | ||||
|  * @returns | ||||
|  */ | ||||
| function setGlobalSettings(settings) { | ||||
| 	gGlobalSettings = settings; | ||||
| 	try { | ||||
| @@ -687,6 +747,12 @@ function setGlobalSettings(settings) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} data | ||||
|  * @param {*} bytes | ||||
|  * @returns | ||||
|  */ | ||||
| function startsWithBytes(data, bytes) { | ||||
| 	if (data.byteLength >= bytes.length) { | ||||
| 		let dataBytes = new Uint8Array(data.slice(0, bytes.length)); | ||||
| @@ -699,11 +765,21 @@ function startsWithBytes(data, bytes) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} path | ||||
|  * @returns | ||||
|  */ | ||||
| function guessTypeFromName(path) { | ||||
| 	let extension = path.split('.').pop(); | ||||
| 	return k_mime_types[extension]; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} data | ||||
|  * @returns | ||||
|  */ | ||||
| function guessTypeFromMagicBytes(data) { | ||||
| 	for (let magic of k_magic_bytes) { | ||||
| 		if (startsWithBytes(data, magic.bytes)) { | ||||
| @@ -712,6 +788,14 @@ function guessTypeFromMagicBytes(data) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} response | ||||
|  * @param {*} data | ||||
|  * @param {*} type | ||||
|  * @param {*} headers | ||||
|  * @param {*} status_code | ||||
|  */ | ||||
| function sendData(response, data, type, headers, status_code) { | ||||
| 	if (data) { | ||||
| 		response.writeHead( | ||||
| @@ -741,6 +825,11 @@ function sendData(response, data, type, headers, status_code) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} id | ||||
|  * @returns | ||||
|  */ | ||||
| async function getBlobOrContent(id) { | ||||
| 	if (!id) { | ||||
| 		return; | ||||
| @@ -752,6 +841,18 @@ async function getBlobOrContent(id) { | ||||
| } | ||||
|  | ||||
| let g_handler_index = 0; | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} response | ||||
|  * @param {*} handler_blob_id | ||||
|  * @param {*} path | ||||
|  * @param {*} query | ||||
|  * @param {*} headers | ||||
|  * @param {*} packageOwner | ||||
|  * @param {*} packageName | ||||
|  * @returns | ||||
|  */ | ||||
| async function useAppHandler( | ||||
| 	response, | ||||
| 	handler_blob_id, | ||||
| @@ -797,7 +898,16 @@ async function useAppHandler( | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} request | ||||
|  * @param {*} response | ||||
|  * @param {*} blobId | ||||
|  * @param {*} uri | ||||
|  * @returns | ||||
|  */ | ||||
| async function blobHandler(request, response, blobId, uri) { | ||||
| 	// TODO(tasiaiso): break this down ? | ||||
| 	for (let i in k_static_files) { | ||||
| 		if (uri === k_static_files[i].uri && k_static_files[i].path) { | ||||
| 			let stat = await File.stat('core/' + k_static_files[i].path); | ||||
| @@ -1079,6 +1189,9 @@ ssb.addEventListener('connections', function () { | ||||
| 	broadcastEvent('onConnectionsChanged', []); | ||||
| }); | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  */ | ||||
| async function loadSettings() { | ||||
| 	let data = {}; | ||||
| 	try { | ||||
| @@ -1097,6 +1210,9 @@ async function loadSettings() { | ||||
| 	gGlobalSettings = data; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  */ | ||||
| function sendStats() { | ||||
| 	let apps = Object.values(gProcesses) | ||||
| 		.filter((process) => process.app && process.stats) | ||||
| @@ -1112,6 +1228,11 @@ function sendStats() { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} process | ||||
|  * @param {*} enabled | ||||
|  */ | ||||
| function enableStats(process, enabled) { | ||||
| 	process.stats = enabled; | ||||
| 	if (!gStatsTimer) { | ||||
| @@ -1120,6 +1241,9 @@ function enableStats(process, enabled) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  */ | ||||
| loadSettings() | ||||
| 	.then(function () { | ||||
| 		if (tildefriends.https_port && gGlobalSettings.http_redirect) { | ||||
| @@ -1213,6 +1337,14 @@ loadSettings() | ||||
| 		exit(1); | ||||
| 	}); | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} user | ||||
|  * @param {*} packageOwner | ||||
|  * @param {*} packageName | ||||
|  * @param {*} permission | ||||
|  * @param {*} allow | ||||
|  */ | ||||
| function storePermission(user, packageOwner, packageName, permission, allow) { | ||||
| 	if (!gGlobalSettings.userPermissions) { | ||||
| 		gGlobalSettings.userPermissions = {}; | ||||
|   | ||||
							
								
								
									
										11
									
								
								core/form.js
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								core/form.js
									
									
									
									
									
								
							| @@ -1,3 +1,8 @@ | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} encoded | ||||
|  * @returns | ||||
|  */ | ||||
| function decode(encoded) { | ||||
| 	let result = ''; | ||||
| 	for (let i = 0; i < encoded.length; i++) { | ||||
| @@ -14,6 +19,12 @@ function decode(encoded) { | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} encoded | ||||
|  * @param {*} initial | ||||
|  * @returns | ||||
|  */ | ||||
| function decodeForm(encoded, initial) { | ||||
| 	let result = initial || {}; | ||||
| 	if (encoded) { | ||||
|   | ||||
							
								
								
									
										18
									
								
								core/http.js
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								core/http.js
									
									
									
									
									
								
							| @@ -1,3 +1,9 @@ | ||||
| /** | ||||
|  * TODOC | ||||
|  * TODO: document so we can improve this | ||||
|  * @param {*} url | ||||
|  * @returns | ||||
|  */ | ||||
| function parseUrl(url) { | ||||
| 	// XXX: Hack. | ||||
| 	let match = url.match(new RegExp('(\\w+)://([^/:]+)(?::(\\d+))?(.*)')); | ||||
| @@ -9,6 +15,11 @@ function parseUrl(url) { | ||||
| 	}; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} data | ||||
|  * @returns | ||||
|  */ | ||||
| function parseResponse(data) { | ||||
| 	let firstLine; | ||||
| 	let headers = {}; | ||||
| @@ -28,6 +39,13 @@ function parseResponse(data) { | ||||
| 	return {body: data}; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} url | ||||
|  * @param {*} options | ||||
|  * @param {*} allowed_hosts | ||||
|  * @returns | ||||
|  */ | ||||
| export function fetch(url, options, allowed_hosts) { | ||||
| 	let parsed = parseUrl(url); | ||||
| 	return new Promise(function (resolve, reject) { | ||||
|   | ||||
| @@ -3,6 +3,10 @@ let g_api = {}; | ||||
| let g_next_id = 1; | ||||
| let g_calls = {}; | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @returns | ||||
|  */ | ||||
| function get_is_browser() { | ||||
| 	try { | ||||
| 		return window !== undefined && console !== undefined; | ||||
| @@ -15,6 +19,13 @@ if (k_is_browser) { | ||||
| 	print = console.log; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} target | ||||
|  * @param {*} prop | ||||
|  * @param {*} receiver | ||||
|  * @returns | ||||
|  */ | ||||
| function make_rpc(target, prop, receiver) { | ||||
| 	return function () { | ||||
| 		let id = g_next_id++; | ||||
| @@ -43,6 +54,10 @@ function make_rpc(target, prop, receiver) { | ||||
| 	}; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} response | ||||
|  */ | ||||
| function send(response) { | ||||
| 	if (k_is_browser) { | ||||
| 		window.parent.postMessage(response, '*'); | ||||
| @@ -51,6 +66,10 @@ function send(response) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} message | ||||
|  */ | ||||
| function call_rpc(message) { | ||||
| 	if (message && message.message === 'tfrpc') { | ||||
| 		let id = message.id; | ||||
| @@ -105,6 +124,10 @@ if (k_is_browser) { | ||||
|  | ||||
| export let rpc = new Proxy({}, {get: make_rpc}); | ||||
|  | ||||
| /** | ||||
|  * TODOC | ||||
|  * @param {*} method | ||||
|  */ | ||||
| export function register(method) { | ||||
| 	g_api[method.name] = method; | ||||
| } | ||||
|   | ||||
							
								
								
									
										2
									
								
								deps/codemirror/cm6.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								deps/codemirror/cm6.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										853
									
								
								deps/codemirror_src/package-lock.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										853
									
								
								deps/codemirror_src/package-lock.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,853 @@ | ||||
| { | ||||
|   "name": "codemirror_src", | ||||
|   "lockfileVersion": 3, | ||||
|   "requires": true, | ||||
|   "packages": { | ||||
|     "": { | ||||
|       "dependencies": { | ||||
|         "@codemirror/lang-css": "^6.2.1", | ||||
|         "@codemirror/lang-html": "^6.4.8", | ||||
|         "@codemirror/lang-javascript": "^6.2.1", | ||||
|         "@codemirror/lang-json": "^6.0.1", | ||||
|         "@codemirror/theme-one-dark": "^6.1.2", | ||||
|         "@rollup/plugin-node-resolve": "^15.2.3", | ||||
|         "codemirror": "^6.0.1", | ||||
|         "rollup": "^4.9.6" | ||||
|       }, | ||||
|       "devDependencies": { | ||||
|         "@rollup/plugin-terser": "^0.4.4" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@codemirror/autocomplete": { | ||||
|       "version": "6.12.0", | ||||
|       "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.12.0.tgz", | ||||
|       "integrity": "sha512-r4IjdYFthwbCQyvqnSlx0WBHRHi8nBvU+WjJxFUij81qsBfhNudf/XKKmmC2j3m0LaOYUQTf3qiEK1J8lO1sdg==", | ||||
|       "dependencies": { | ||||
|         "@codemirror/language": "^6.0.0", | ||||
|         "@codemirror/state": "^6.0.0", | ||||
|         "@codemirror/view": "^6.17.0", | ||||
|         "@lezer/common": "^1.0.0" | ||||
|       }, | ||||
|       "peerDependencies": { | ||||
|         "@codemirror/language": "^6.0.0", | ||||
|         "@codemirror/state": "^6.0.0", | ||||
|         "@codemirror/view": "^6.0.0", | ||||
|         "@lezer/common": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@codemirror/commands": { | ||||
|       "version": "6.3.3", | ||||
|       "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.3.3.tgz", | ||||
|       "integrity": "sha512-dO4hcF0fGT9tu1Pj1D2PvGvxjeGkbC6RGcZw6Qs74TH+Ed1gw98jmUgd2axWvIZEqTeTuFrg1lEB1KV6cK9h1A==", | ||||
|       "dependencies": { | ||||
|         "@codemirror/language": "^6.0.0", | ||||
|         "@codemirror/state": "^6.4.0", | ||||
|         "@codemirror/view": "^6.0.0", | ||||
|         "@lezer/common": "^1.1.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@codemirror/lang-css": { | ||||
|       "version": "6.2.1", | ||||
|       "resolved": "https://registry.npmjs.org/@codemirror/lang-css/-/lang-css-6.2.1.tgz", | ||||
|       "integrity": "sha512-/UNWDNV5Viwi/1lpr/dIXJNWiwDxpw13I4pTUAsNxZdg6E0mI2kTQb0P2iHczg1Tu+H4EBgJR+hYhKiHKko7qg==", | ||||
|       "dependencies": { | ||||
|         "@codemirror/autocomplete": "^6.0.0", | ||||
|         "@codemirror/language": "^6.0.0", | ||||
|         "@codemirror/state": "^6.0.0", | ||||
|         "@lezer/common": "^1.0.2", | ||||
|         "@lezer/css": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@codemirror/lang-html": { | ||||
|       "version": "6.4.8", | ||||
|       "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.8.tgz", | ||||
|       "integrity": "sha512-tE2YK7wDlb9ZpAH6mpTPiYm6rhfdQKVDa5r9IwIFlwwgvVaKsCfuKKZoJGWsmMZIf3FQAuJ5CHMPLymOtg1hXw==", | ||||
|       "dependencies": { | ||||
|         "@codemirror/autocomplete": "^6.0.0", | ||||
|         "@codemirror/lang-css": "^6.0.0", | ||||
|         "@codemirror/lang-javascript": "^6.0.0", | ||||
|         "@codemirror/language": "^6.4.0", | ||||
|         "@codemirror/state": "^6.0.0", | ||||
|         "@codemirror/view": "^6.17.0", | ||||
|         "@lezer/common": "^1.0.0", | ||||
|         "@lezer/css": "^1.1.0", | ||||
|         "@lezer/html": "^1.3.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@codemirror/lang-javascript": { | ||||
|       "version": "6.2.1", | ||||
|       "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.2.1.tgz", | ||||
|       "integrity": "sha512-jlFOXTejVyiQCW3EQwvKH0m99bUYIw40oPmFjSX2VS78yzfe0HELZ+NEo9Yfo1MkGRpGlj3Gnu4rdxV1EnAs5A==", | ||||
|       "dependencies": { | ||||
|         "@codemirror/autocomplete": "^6.0.0", | ||||
|         "@codemirror/language": "^6.6.0", | ||||
|         "@codemirror/lint": "^6.0.0", | ||||
|         "@codemirror/state": "^6.0.0", | ||||
|         "@codemirror/view": "^6.17.0", | ||||
|         "@lezer/common": "^1.0.0", | ||||
|         "@lezer/javascript": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@codemirror/lang-javascript/node_modules/@lezer/javascript": { | ||||
|       "version": "1.4.13", | ||||
|       "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.4.13.tgz", | ||||
|       "integrity": "sha512-5IBr8LIO3xJdJH1e9aj/ZNLE4LSbdsx25wFmGRAZsj2zSmwAYjx26JyU/BYOCpRQlu1jcv1z3vy4NB9+UkfRow==", | ||||
|       "dependencies": { | ||||
|         "@lezer/common": "^1.2.0", | ||||
|         "@lezer/highlight": "^1.1.3", | ||||
|         "@lezer/lr": "^1.3.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@codemirror/lang-javascript/node_modules/@lezer/lr": { | ||||
|       "version": "1.4.0", | ||||
|       "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.0.tgz", | ||||
|       "integrity": "sha512-Wst46p51km8gH0ZUmeNrtpRYmdlRHUpN1DQd3GFAyKANi8WVz8c2jHYTf1CVScFaCjQw1iO3ZZdqGDxQPRErTg==", | ||||
|       "dependencies": { | ||||
|         "@lezer/common": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@codemirror/lang-json": { | ||||
|       "version": "6.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/@codemirror/lang-json/-/lang-json-6.0.1.tgz", | ||||
|       "integrity": "sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==", | ||||
|       "dependencies": { | ||||
|         "@codemirror/language": "^6.0.0", | ||||
|         "@lezer/json": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@codemirror/language": { | ||||
|       "version": "6.10.1", | ||||
|       "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.10.1.tgz", | ||||
|       "integrity": "sha512-5GrXzrhq6k+gL5fjkAwt90nYDmjlzTIJV8THnxNFtNKWotMIlzzN+CpqxqwXOECnUdOndmSeWntVrVcv5axWRQ==", | ||||
|       "dependencies": { | ||||
|         "@codemirror/state": "^6.0.0", | ||||
|         "@codemirror/view": "^6.23.0", | ||||
|         "@lezer/common": "^1.1.0", | ||||
|         "@lezer/highlight": "^1.0.0", | ||||
|         "@lezer/lr": "^1.0.0", | ||||
|         "style-mod": "^4.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@codemirror/language/node_modules/@lezer/lr": { | ||||
|       "version": "1.4.0", | ||||
|       "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.0.tgz", | ||||
|       "integrity": "sha512-Wst46p51km8gH0ZUmeNrtpRYmdlRHUpN1DQd3GFAyKANi8WVz8c2jHYTf1CVScFaCjQw1iO3ZZdqGDxQPRErTg==", | ||||
|       "dependencies": { | ||||
|         "@lezer/common": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@codemirror/language/node_modules/style-mod": { | ||||
|       "version": "4.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.0.tgz", | ||||
|       "integrity": "sha512-Ca5ib8HrFn+f+0n4N4ScTIA9iTOQ7MaGS1ylHcoVqW9J7w2w8PzN6g9gKmTYgGEBH8e120+RCmhpje6jC5uGWA==" | ||||
|     }, | ||||
|     "node_modules/@codemirror/lint": { | ||||
|       "version": "6.5.0", | ||||
|       "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.5.0.tgz", | ||||
|       "integrity": "sha512-+5YyicIaaAZKU8K43IQi8TBy6mF6giGeWAH7N96Z5LC30Wm5JMjqxOYIE9mxwMG1NbhT2mA3l9hA4uuKUM3E5g==", | ||||
|       "dependencies": { | ||||
|         "@codemirror/state": "^6.0.0", | ||||
|         "@codemirror/view": "^6.0.0", | ||||
|         "crelt": "^1.0.5" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@codemirror/lint/node_modules/crelt": { | ||||
|       "version": "1.0.6", | ||||
|       "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", | ||||
|       "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==" | ||||
|     }, | ||||
|     "node_modules/@codemirror/search": { | ||||
|       "version": "6.5.6", | ||||
|       "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.6.tgz", | ||||
|       "integrity": "sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q==", | ||||
|       "dependencies": { | ||||
|         "@codemirror/state": "^6.0.0", | ||||
|         "@codemirror/view": "^6.0.0", | ||||
|         "crelt": "^1.0.5" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@codemirror/search/node_modules/crelt": { | ||||
|       "version": "1.0.6", | ||||
|       "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", | ||||
|       "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==" | ||||
|     }, | ||||
|     "node_modules/@codemirror/state": { | ||||
|       "version": "6.4.1", | ||||
|       "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.4.1.tgz", | ||||
|       "integrity": "sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==" | ||||
|     }, | ||||
|     "node_modules/@codemirror/theme-one-dark": { | ||||
|       "version": "6.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/@codemirror/theme-one-dark/-/theme-one-dark-6.1.2.tgz", | ||||
|       "integrity": "sha512-F+sH0X16j/qFLMAfbciKTxVOwkdAS336b7AXTKOZhy8BR3eH/RelsnLgLFINrpST63mmN2OuwUt0W2ndUgYwUA==", | ||||
|       "dependencies": { | ||||
|         "@codemirror/language": "^6.0.0", | ||||
|         "@codemirror/state": "^6.0.0", | ||||
|         "@codemirror/view": "^6.0.0", | ||||
|         "@lezer/highlight": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@codemirror/view": { | ||||
|       "version": "6.24.0", | ||||
|       "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.24.0.tgz", | ||||
|       "integrity": "sha512-zK6m5pNkdhdJl8idPP1gA4N8JKTiSsOz8U/Iw+C1ChMwyLG7+MLiNXnH/wFuAk6KeGEe33/adOiAh5jMqee03w==", | ||||
|       "dependencies": { | ||||
|         "@codemirror/state": "^6.4.0", | ||||
|         "style-mod": "^4.1.0", | ||||
|         "w3c-keyname": "^2.2.4" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@codemirror/view/node_modules/style-mod": { | ||||
|       "version": "4.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.0.tgz", | ||||
|       "integrity": "sha512-Ca5ib8HrFn+f+0n4N4ScTIA9iTOQ7MaGS1ylHcoVqW9J7w2w8PzN6g9gKmTYgGEBH8e120+RCmhpje6jC5uGWA==" | ||||
|     }, | ||||
|     "node_modules/@codemirror/view/node_modules/w3c-keyname": { | ||||
|       "version": "2.2.8", | ||||
|       "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", | ||||
|       "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==" | ||||
|     }, | ||||
|     "node_modules/@lezer/common": { | ||||
|       "version": "1.2.1", | ||||
|       "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.1.tgz", | ||||
|       "integrity": "sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ==" | ||||
|     }, | ||||
|     "node_modules/@lezer/css": { | ||||
|       "version": "1.1.8", | ||||
|       "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.1.8.tgz", | ||||
|       "integrity": "sha512-7JhxupKuMBaWQKjQoLtzhGj83DdnZY9MckEOG5+/iLKNK2ZJqKc6hf6uc0HjwCX7Qlok44jBNqZhHKDhEhZYLA==", | ||||
|       "dependencies": { | ||||
|         "@lezer/common": "^1.2.0", | ||||
|         "@lezer/highlight": "^1.0.0", | ||||
|         "@lezer/lr": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@lezer/css/node_modules/@lezer/lr": { | ||||
|       "version": "1.4.0", | ||||
|       "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.0.tgz", | ||||
|       "integrity": "sha512-Wst46p51km8gH0ZUmeNrtpRYmdlRHUpN1DQd3GFAyKANi8WVz8c2jHYTf1CVScFaCjQw1iO3ZZdqGDxQPRErTg==", | ||||
|       "dependencies": { | ||||
|         "@lezer/common": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@lezer/highlight": { | ||||
|       "version": "1.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.0.tgz", | ||||
|       "integrity": "sha512-WrS5Mw51sGrpqjlh3d4/fOwpEV2Hd3YOkp9DBt4k8XZQcoTHZFB7sx030A6OcahF4J1nDQAa3jXlTVVYH50IFA==", | ||||
|       "dependencies": { | ||||
|         "@lezer/common": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@lezer/html": { | ||||
|       "version": "1.3.8", | ||||
|       "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.8.tgz", | ||||
|       "integrity": "sha512-EXseJ3pUzWxE6XQBQdqWHZqqlGQRSuNMBcLb6mZWS2J2v+QZhOObD+3ZIKIcm59ntTzyor4LqFTb72iJc3k23Q==", | ||||
|       "dependencies": { | ||||
|         "@lezer/common": "^1.2.0", | ||||
|         "@lezer/highlight": "^1.0.0", | ||||
|         "@lezer/lr": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@lezer/html/node_modules/@lezer/lr": { | ||||
|       "version": "1.4.0", | ||||
|       "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.0.tgz", | ||||
|       "integrity": "sha512-Wst46p51km8gH0ZUmeNrtpRYmdlRHUpN1DQd3GFAyKANi8WVz8c2jHYTf1CVScFaCjQw1iO3ZZdqGDxQPRErTg==", | ||||
|       "dependencies": { | ||||
|         "@lezer/common": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@lezer/json": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/@lezer/json/-/json-1.0.2.tgz", | ||||
|       "integrity": "sha512-xHT2P4S5eeCYECyKNPhr4cbEL9tc8w83SPwRC373o9uEdrvGKTZoJVAGxpOsZckMlEh9W23Pc72ew918RWQOBQ==", | ||||
|       "dependencies": { | ||||
|         "@lezer/common": "^1.2.0", | ||||
|         "@lezer/highlight": "^1.0.0", | ||||
|         "@lezer/lr": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@lezer/json/node_modules/@lezer/lr": { | ||||
|       "version": "1.4.0", | ||||
|       "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.0.tgz", | ||||
|       "integrity": "sha512-Wst46p51km8gH0ZUmeNrtpRYmdlRHUpN1DQd3GFAyKANi8WVz8c2jHYTf1CVScFaCjQw1iO3ZZdqGDxQPRErTg==", | ||||
|       "dependencies": { | ||||
|         "@lezer/common": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@rollup/plugin-node-resolve": { | ||||
|       "version": "15.2.3", | ||||
|       "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", | ||||
|       "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", | ||||
|       "dependencies": { | ||||
|         "@rollup/pluginutils": "^5.0.1", | ||||
|         "@types/resolve": "1.20.2", | ||||
|         "deepmerge": "^4.2.2", | ||||
|         "is-builtin-module": "^3.2.1", | ||||
|         "is-module": "^1.0.0", | ||||
|         "resolve": "^1.22.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=14.0.0" | ||||
|       }, | ||||
|       "peerDependencies": { | ||||
|         "rollup": "^2.78.0||^3.0.0||^4.0.0" | ||||
|       }, | ||||
|       "peerDependenciesMeta": { | ||||
|         "rollup": { | ||||
|           "optional": true | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@rollup/plugin-terser": { | ||||
|       "version": "0.4.4", | ||||
|       "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", | ||||
|       "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "serialize-javascript": "^6.0.1", | ||||
|         "smob": "^1.0.0", | ||||
|         "terser": "^5.17.4" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=14.0.0" | ||||
|       }, | ||||
|       "peerDependencies": { | ||||
|         "rollup": "^2.0.0||^3.0.0||^4.0.0" | ||||
|       }, | ||||
|       "peerDependenciesMeta": { | ||||
|         "rollup": { | ||||
|           "optional": true | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@rollup/pluginutils": { | ||||
|       "version": "5.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", | ||||
|       "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", | ||||
|       "dependencies": { | ||||
|         "@types/estree": "^1.0.0", | ||||
|         "estree-walker": "^2.0.2", | ||||
|         "picomatch": "^2.3.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=14.0.0" | ||||
|       }, | ||||
|       "peerDependencies": { | ||||
|         "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" | ||||
|       }, | ||||
|       "peerDependenciesMeta": { | ||||
|         "rollup": { | ||||
|           "optional": true | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@rollup/pluginutils/node_modules/@types/estree": { | ||||
|       "version": "1.0.5", | ||||
|       "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", | ||||
|       "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" | ||||
|     }, | ||||
|     "node_modules/@rollup/pluginutils/node_modules/estree-walker": { | ||||
|       "version": "2.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", | ||||
|       "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" | ||||
|     }, | ||||
|     "node_modules/@rollup/pluginutils/node_modules/picomatch": { | ||||
|       "version": "2.3.1", | ||||
|       "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", | ||||
|       "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", | ||||
|       "engines": { | ||||
|         "node": ">=8.6" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/jonschlinkert" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@rollup/rollup-android-arm-eabi": { | ||||
|       "version": "4.12.0", | ||||
|       "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz", | ||||
|       "integrity": "sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==", | ||||
|       "cpu": [ | ||||
|         "arm" | ||||
|       ], | ||||
|       "optional": true, | ||||
|       "os": [ | ||||
|         "android" | ||||
|       ] | ||||
|     }, | ||||
|     "node_modules/@rollup/rollup-android-arm64": { | ||||
|       "version": "4.12.0", | ||||
|       "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz", | ||||
|       "integrity": "sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==", | ||||
|       "cpu": [ | ||||
|         "arm64" | ||||
|       ], | ||||
|       "optional": true, | ||||
|       "os": [ | ||||
|         "android" | ||||
|       ] | ||||
|     }, | ||||
|     "node_modules/@rollup/rollup-darwin-arm64": { | ||||
|       "version": "4.12.0", | ||||
|       "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz", | ||||
|       "integrity": "sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==", | ||||
|       "cpu": [ | ||||
|         "arm64" | ||||
|       ], | ||||
|       "optional": true, | ||||
|       "os": [ | ||||
|         "darwin" | ||||
|       ] | ||||
|     }, | ||||
|     "node_modules/@rollup/rollup-darwin-x64": { | ||||
|       "version": "4.12.0", | ||||
|       "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz", | ||||
|       "integrity": "sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==", | ||||
|       "cpu": [ | ||||
|         "x64" | ||||
|       ], | ||||
|       "optional": true, | ||||
|       "os": [ | ||||
|         "darwin" | ||||
|       ] | ||||
|     }, | ||||
|     "node_modules/@rollup/rollup-linux-arm-gnueabihf": { | ||||
|       "version": "4.12.0", | ||||
|       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz", | ||||
|       "integrity": "sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==", | ||||
|       "cpu": [ | ||||
|         "arm" | ||||
|       ], | ||||
|       "optional": true, | ||||
|       "os": [ | ||||
|         "linux" | ||||
|       ] | ||||
|     }, | ||||
|     "node_modules/@rollup/rollup-linux-arm64-gnu": { | ||||
|       "version": "4.12.0", | ||||
|       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz", | ||||
|       "integrity": "sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==", | ||||
|       "cpu": [ | ||||
|         "arm64" | ||||
|       ], | ||||
|       "optional": true, | ||||
|       "os": [ | ||||
|         "linux" | ||||
|       ] | ||||
|     }, | ||||
|     "node_modules/@rollup/rollup-linux-arm64-musl": { | ||||
|       "version": "4.12.0", | ||||
|       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz", | ||||
|       "integrity": "sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==", | ||||
|       "cpu": [ | ||||
|         "arm64" | ||||
|       ], | ||||
|       "optional": true, | ||||
|       "os": [ | ||||
|         "linux" | ||||
|       ] | ||||
|     }, | ||||
|     "node_modules/@rollup/rollup-linux-riscv64-gnu": { | ||||
|       "version": "4.12.0", | ||||
|       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz", | ||||
|       "integrity": "sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==", | ||||
|       "cpu": [ | ||||
|         "riscv64" | ||||
|       ], | ||||
|       "optional": true, | ||||
|       "os": [ | ||||
|         "linux" | ||||
|       ] | ||||
|     }, | ||||
|     "node_modules/@rollup/rollup-win32-arm64-msvc": { | ||||
|       "version": "4.12.0", | ||||
|       "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz", | ||||
|       "integrity": "sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==", | ||||
|       "cpu": [ | ||||
|         "arm64" | ||||
|       ], | ||||
|       "optional": true, | ||||
|       "os": [ | ||||
|         "win32" | ||||
|       ] | ||||
|     }, | ||||
|     "node_modules/@rollup/rollup-win32-ia32-msvc": { | ||||
|       "version": "4.12.0", | ||||
|       "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz", | ||||
|       "integrity": "sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==", | ||||
|       "cpu": [ | ||||
|         "ia32" | ||||
|       ], | ||||
|       "optional": true, | ||||
|       "os": [ | ||||
|         "win32" | ||||
|       ] | ||||
|     }, | ||||
|     "node_modules/@rollup/rollup-win32-x64-msvc": { | ||||
|       "version": "4.12.0", | ||||
|       "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz", | ||||
|       "integrity": "sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==", | ||||
|       "cpu": [ | ||||
|         "x64" | ||||
|       ], | ||||
|       "optional": true, | ||||
|       "os": [ | ||||
|         "win32" | ||||
|       ] | ||||
|     }, | ||||
|     "node_modules/@types/resolve": { | ||||
|       "version": "1.20.2", | ||||
|       "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", | ||||
|       "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==" | ||||
|     }, | ||||
|     "node_modules/codemirror": { | ||||
|       "version": "6.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", | ||||
|       "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==", | ||||
|       "dependencies": { | ||||
|         "@codemirror/autocomplete": "^6.0.0", | ||||
|         "@codemirror/commands": "^6.0.0", | ||||
|         "@codemirror/language": "^6.0.0", | ||||
|         "@codemirror/lint": "^6.0.0", | ||||
|         "@codemirror/search": "^6.0.0", | ||||
|         "@codemirror/state": "^6.0.0", | ||||
|         "@codemirror/view": "^6.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/deepmerge": { | ||||
|       "version": "4.3.1", | ||||
|       "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", | ||||
|       "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", | ||||
|       "engines": { | ||||
|         "node": ">=0.10.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/fsevents": { | ||||
|       "version": "2.3.3", | ||||
|       "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", | ||||
|       "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", | ||||
|       "hasInstallScript": true, | ||||
|       "optional": true, | ||||
|       "os": [ | ||||
|         "darwin" | ||||
|       ], | ||||
|       "engines": { | ||||
|         "node": "^8.16.0 || ^10.6.0 || >=11.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/is-builtin-module": { | ||||
|       "version": "3.2.1", | ||||
|       "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", | ||||
|       "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", | ||||
|       "dependencies": { | ||||
|         "builtin-modules": "^3.3.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=6" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/sindresorhus" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/is-builtin-module/node_modules/builtin-modules": { | ||||
|       "version": "3.3.0", | ||||
|       "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", | ||||
|       "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", | ||||
|       "engines": { | ||||
|         "node": ">=6" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/sindresorhus" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/is-module": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", | ||||
|       "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" | ||||
|     }, | ||||
|     "node_modules/resolve": { | ||||
|       "version": "1.22.8", | ||||
|       "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", | ||||
|       "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", | ||||
|       "dependencies": { | ||||
|         "is-core-module": "^2.13.0", | ||||
|         "path-parse": "^1.0.7", | ||||
|         "supports-preserve-symlinks-flag": "^1.0.0" | ||||
|       }, | ||||
|       "bin": { | ||||
|         "resolve": "bin/resolve" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/resolve/node_modules/function-bind": { | ||||
|       "version": "1.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", | ||||
|       "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/resolve/node_modules/hasown": { | ||||
|       "version": "2.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", | ||||
|       "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", | ||||
|       "dependencies": { | ||||
|         "function-bind": "^1.1.2" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">= 0.4" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/resolve/node_modules/is-core-module": { | ||||
|       "version": "2.13.1", | ||||
|       "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", | ||||
|       "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", | ||||
|       "dependencies": { | ||||
|         "hasown": "^2.0.0" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/resolve/node_modules/path-parse": { | ||||
|       "version": "1.0.7", | ||||
|       "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", | ||||
|       "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" | ||||
|     }, | ||||
|     "node_modules/resolve/node_modules/supports-preserve-symlinks-flag": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", | ||||
|       "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", | ||||
|       "engines": { | ||||
|         "node": ">= 0.4" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/rollup": { | ||||
|       "version": "4.12.0", | ||||
|       "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.0.tgz", | ||||
|       "integrity": "sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==", | ||||
|       "dependencies": { | ||||
|         "@types/estree": "1.0.5" | ||||
|       }, | ||||
|       "bin": { | ||||
|         "rollup": "dist/bin/rollup" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=18.0.0", | ||||
|         "npm": ">=8.0.0" | ||||
|       }, | ||||
|       "optionalDependencies": { | ||||
|         "@rollup/rollup-android-arm-eabi": "4.12.0", | ||||
|         "@rollup/rollup-android-arm64": "4.12.0", | ||||
|         "@rollup/rollup-darwin-arm64": "4.12.0", | ||||
|         "@rollup/rollup-darwin-x64": "4.12.0", | ||||
|         "@rollup/rollup-linux-arm-gnueabihf": "4.12.0", | ||||
|         "@rollup/rollup-linux-arm64-gnu": "4.12.0", | ||||
|         "@rollup/rollup-linux-arm64-musl": "4.12.0", | ||||
|         "@rollup/rollup-linux-riscv64-gnu": "4.12.0", | ||||
|         "@rollup/rollup-linux-x64-gnu": "4.12.0", | ||||
|         "@rollup/rollup-linux-x64-musl": "4.12.0", | ||||
|         "@rollup/rollup-win32-arm64-msvc": "4.12.0", | ||||
|         "@rollup/rollup-win32-ia32-msvc": "4.12.0", | ||||
|         "@rollup/rollup-win32-x64-msvc": "4.12.0", | ||||
|         "fsevents": "~2.3.2" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-gnu": { | ||||
|       "version": "4.12.0", | ||||
|       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz", | ||||
|       "integrity": "sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==", | ||||
|       "cpu": [ | ||||
|         "x64" | ||||
|       ], | ||||
|       "optional": true, | ||||
|       "os": [ | ||||
|         "linux" | ||||
|       ] | ||||
|     }, | ||||
|     "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-musl": { | ||||
|       "version": "4.12.0", | ||||
|       "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz", | ||||
|       "integrity": "sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==", | ||||
|       "cpu": [ | ||||
|         "x64" | ||||
|       ], | ||||
|       "optional": true, | ||||
|       "os": [ | ||||
|         "linux" | ||||
|       ] | ||||
|     }, | ||||
|     "node_modules/rollup/node_modules/@types/estree": { | ||||
|       "version": "1.0.5", | ||||
|       "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", | ||||
|       "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" | ||||
|     }, | ||||
|     "node_modules/serialize-javascript": { | ||||
|       "version": "6.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", | ||||
|       "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "randombytes": "^2.1.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/serialize-javascript/node_modules/randombytes": { | ||||
|       "version": "2.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", | ||||
|       "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "safe-buffer": "^5.1.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/serialize-javascript/node_modules/safe-buffer": { | ||||
|       "version": "5.2.1", | ||||
|       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", | ||||
|       "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", | ||||
|       "dev": true, | ||||
|       "funding": [ | ||||
|         { | ||||
|           "type": "github", | ||||
|           "url": "https://github.com/sponsors/feross" | ||||
|         }, | ||||
|         { | ||||
|           "type": "patreon", | ||||
|           "url": "https://www.patreon.com/feross" | ||||
|         }, | ||||
|         { | ||||
|           "type": "consulting", | ||||
|           "url": "https://feross.org/support" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "node_modules/smob": { | ||||
|       "version": "1.4.1", | ||||
|       "resolved": "https://registry.npmjs.org/smob/-/smob-1.4.1.tgz", | ||||
|       "integrity": "sha512-9LK+E7Hv5R9u4g4C3p+jjLstaLe11MDsL21UpYaCNmapvMkYhqCV4A/f/3gyH8QjMyh6l68q9xC85vihY9ahMQ==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "node_modules/terser": { | ||||
|       "version": "5.27.2", | ||||
|       "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.2.tgz", | ||||
|       "integrity": "sha512-sHXmLSkImesJ4p5apTeT63DsV4Obe1s37qT8qvwHRmVxKTBH7Rv9Wr26VcAMmLbmk9UliiwK8z+657NyJHHy/w==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "@jridgewell/source-map": "^0.3.3", | ||||
|         "acorn": "^8.8.2", | ||||
|         "commander": "^2.20.0", | ||||
|         "source-map-support": "~0.5.20" | ||||
|       }, | ||||
|       "bin": { | ||||
|         "terser": "bin/terser" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=10" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/terser/node_modules/@jridgewell/gen-mapping": { | ||||
|       "version": "0.3.3", | ||||
|       "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", | ||||
|       "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "@jridgewell/set-array": "^1.0.1", | ||||
|         "@jridgewell/sourcemap-codec": "^1.4.10", | ||||
|         "@jridgewell/trace-mapping": "^0.3.9" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=6.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/terser/node_modules/@jridgewell/resolve-uri": { | ||||
|       "version": "3.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", | ||||
|       "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", | ||||
|       "dev": true, | ||||
|       "engines": { | ||||
|         "node": ">=6.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/terser/node_modules/@jridgewell/set-array": { | ||||
|       "version": "1.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", | ||||
|       "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", | ||||
|       "dev": true, | ||||
|       "engines": { | ||||
|         "node": ">=6.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/terser/node_modules/@jridgewell/source-map": { | ||||
|       "version": "0.3.5", | ||||
|       "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", | ||||
|       "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "@jridgewell/gen-mapping": "^0.3.0", | ||||
|         "@jridgewell/trace-mapping": "^0.3.9" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/terser/node_modules/@jridgewell/sourcemap-codec": { | ||||
|       "version": "1.4.15", | ||||
|       "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", | ||||
|       "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "node_modules/terser/node_modules/@jridgewell/trace-mapping": { | ||||
|       "version": "0.3.22", | ||||
|       "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", | ||||
|       "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "@jridgewell/resolve-uri": "^3.1.0", | ||||
|         "@jridgewell/sourcemap-codec": "^1.4.14" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/terser/node_modules/acorn": { | ||||
|       "version": "8.11.3", | ||||
|       "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", | ||||
|       "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", | ||||
|       "dev": true, | ||||
|       "bin": { | ||||
|         "acorn": "bin/acorn" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=0.4.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/terser/node_modules/buffer-from": { | ||||
|       "version": "1.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", | ||||
|       "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "node_modules/terser/node_modules/commander": { | ||||
|       "version": "2.20.3", | ||||
|       "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", | ||||
|       "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "node_modules/terser/node_modules/source-map": { | ||||
|       "version": "0.6.1", | ||||
|       "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", | ||||
|       "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", | ||||
|       "dev": true, | ||||
|       "engines": { | ||||
|         "node": ">=0.10.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/terser/node_modules/source-map-support": { | ||||
|       "version": "0.5.21", | ||||
|       "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", | ||||
|       "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "buffer-from": "^1.0.0", | ||||
|         "source-map": "^0.6.0" | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
							
								
								
									
										3
									
								
								deps/codemirror_src/package.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								deps/codemirror_src/package.json
									
									
									
									
										vendored
									
									
								
							| @@ -1,4 +1,7 @@ | ||||
| { | ||||
|   "scripts": { | ||||
|     "build": "rollup --config rollup.config.mjs --input editor.mjs" | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "@codemirror/lang-css": "^6.2.1", | ||||
|     "@codemirror/lang-html": "^6.4.8", | ||||
|   | ||||
| @@ -1,16 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  * This file is only used by HP C on VMS, and is included automatically | ||||
|  * after each header file from this directory | ||||
|  */ | ||||
|  | ||||
| /* restore state.  Must correspond to the save in __decc_include_prologue.h */ | ||||
| #pragma names restore | ||||
| @@ -1,20 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  * This file is only used by HP C on VMS, and is included automatically | ||||
|  * after each header file from this directory | ||||
|  */ | ||||
|  | ||||
| /* save state */ | ||||
| #pragma names save | ||||
| /* have the compiler shorten symbols larger than 31 chars to 23 chars | ||||
|  * followed by a 8 hex char CRC | ||||
|  */ | ||||
| #pragma names as_is,shortened | ||||
| @@ -1,514 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2019-2024 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_AES_PLATFORM_H | ||||
| # define OSSL_AES_PLATFORM_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/aes.h> | ||||
|  | ||||
| # ifdef VPAES_ASM | ||||
| int vpaes_set_encrypt_key(const unsigned char *userKey, int bits, | ||||
|                           AES_KEY *key); | ||||
| int vpaes_set_decrypt_key(const unsigned char *userKey, int bits, | ||||
|                           AES_KEY *key); | ||||
| void vpaes_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                    const AES_KEY *key); | ||||
| void vpaes_decrypt(const unsigned char *in, unsigned char *out, | ||||
|                    const AES_KEY *key); | ||||
| void vpaes_cbc_encrypt(const unsigned char *in, | ||||
|                        unsigned char *out, | ||||
|                        size_t length, | ||||
|                        const AES_KEY *key, unsigned char *ivec, int enc); | ||||
| # endif /* VPAES_ASM */ | ||||
|  | ||||
| # ifdef BSAES_ASM | ||||
| void ossl_bsaes_cbc_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                             size_t length, const AES_KEY *key, | ||||
|                             unsigned char ivec[16], int enc); | ||||
| void ossl_bsaes_ctr32_encrypt_blocks(const unsigned char *in, | ||||
|                                      unsigned char *out, size_t len, | ||||
|                                      const AES_KEY *key, | ||||
|                                      const unsigned char ivec[16]); | ||||
| void ossl_bsaes_xts_encrypt(const unsigned char *inp, unsigned char *out, | ||||
|                             size_t len, const AES_KEY *key1, | ||||
|                             const AES_KEY *key2, const unsigned char iv[16]); | ||||
| void ossl_bsaes_xts_decrypt(const unsigned char *inp, unsigned char *out, | ||||
|                             size_t len, const AES_KEY *key1, | ||||
|                             const AES_KEY *key2, const unsigned char iv[16]); | ||||
| # endif /* BSAES_ASM */ | ||||
|  | ||||
| # ifdef AES_CTR_ASM | ||||
| void AES_ctr32_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                        size_t blocks, const AES_KEY *key, | ||||
|                        const unsigned char ivec[AES_BLOCK_SIZE]); | ||||
| # endif /*  AES_CTR_ASM */ | ||||
|  | ||||
| # ifdef AES_XTS_ASM | ||||
| void AES_xts_encrypt(const unsigned char *inp, unsigned char *out, size_t len, | ||||
|                      const AES_KEY *key1, const AES_KEY *key2, | ||||
|                      const unsigned char iv[16]); | ||||
| void AES_xts_decrypt(const unsigned char *inp, unsigned char *out, size_t len, | ||||
|                      const AES_KEY *key1, const AES_KEY *key2, | ||||
|                      const unsigned char iv[16]); | ||||
| # endif /* AES_XTS_ASM */ | ||||
|  | ||||
| # if defined(OPENSSL_CPUID_OBJ) | ||||
| #  if (defined(__powerpc__) || defined(__ppc__) || defined(_ARCH_PPC)) | ||||
| #   include "crypto/ppc_arch.h" | ||||
| #   ifdef VPAES_ASM | ||||
| #    define VPAES_CAPABLE (OPENSSL_ppccap_P & PPC_ALTIVEC) | ||||
| #   endif | ||||
| #   if !defined(OPENSSL_SYS_AIX) && !defined(OPENSSL_SYS_MACOSX) | ||||
| #    define HWAES_CAPABLE  (OPENSSL_ppccap_P & PPC_CRYPTO207) | ||||
| #    define HWAES_set_encrypt_key aes_p8_set_encrypt_key | ||||
| #    define HWAES_set_decrypt_key aes_p8_set_decrypt_key | ||||
| #    define HWAES_encrypt aes_p8_encrypt | ||||
| #    define HWAES_decrypt aes_p8_decrypt | ||||
| #    define HWAES_cbc_encrypt aes_p8_cbc_encrypt | ||||
| #    define HWAES_ctr32_encrypt_blocks aes_p8_ctr32_encrypt_blocks | ||||
| #    define HWAES_xts_encrypt aes_p8_xts_encrypt | ||||
| #    define HWAES_xts_decrypt aes_p8_xts_decrypt | ||||
| #    define PPC_AES_GCM_CAPABLE (OPENSSL_ppccap_P & PPC_MADD300) | ||||
| #    define AES_GCM_ENC_BYTES 128 | ||||
| #    define AES_GCM_DEC_BYTES 128 | ||||
| size_t ppc_aes_gcm_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                            size_t len, const void *key, unsigned char ivec[16], | ||||
|                            u64 *Xi); | ||||
| size_t ppc_aes_gcm_decrypt(const unsigned char *in, unsigned char *out, | ||||
|                            size_t len, const void *key, unsigned char ivec[16], | ||||
|                            u64 *Xi); | ||||
| #    define AES_GCM_ASM_PPC(gctx) ((gctx)->ctr==aes_p8_ctr32_encrypt_blocks && \ | ||||
|                                    (gctx)->gcm.funcs.ghash==gcm_ghash_p8) | ||||
| void gcm_ghash_p8(u64 Xi[2],const u128 Htable[16],const u8 *inp, size_t len); | ||||
| #   endif /* OPENSSL_SYS_AIX || OPENSSL_SYS_MACOSX */ | ||||
| #  endif /* PPC */ | ||||
|  | ||||
| #  if (defined(__arm__) || defined(__arm) || defined(__aarch64__) || defined(_M_ARM64))  | ||||
| #   include "arm_arch.h" | ||||
| #   if __ARM_MAX_ARCH__>=7 | ||||
| #    if defined(BSAES_ASM) | ||||
| #     define BSAES_CAPABLE (OPENSSL_armcap_P & ARMV7_NEON) | ||||
| #    endif | ||||
| #    if defined(VPAES_ASM) | ||||
| #     define VPAES_CAPABLE (OPENSSL_armcap_P & ARMV7_NEON) | ||||
| #    endif | ||||
| #    define HWAES_CAPABLE (OPENSSL_armcap_P & ARMV8_AES) | ||||
| #    define HWAES_set_encrypt_key aes_v8_set_encrypt_key | ||||
| #    define HWAES_set_decrypt_key aes_v8_set_decrypt_key | ||||
| #    define HWAES_encrypt aes_v8_encrypt | ||||
| #    define HWAES_decrypt aes_v8_decrypt | ||||
| #    define HWAES_cbc_encrypt aes_v8_cbc_encrypt | ||||
| #    define HWAES_ecb_encrypt aes_v8_ecb_encrypt | ||||
| #    if __ARM_MAX_ARCH__>=8 && (defined(__aarch64__) || defined(_M_ARM64)) | ||||
| #     define HWAES_xts_encrypt aes_v8_xts_encrypt | ||||
| #     define HWAES_xts_decrypt aes_v8_xts_decrypt | ||||
| #    endif | ||||
| #    define HWAES_ctr32_encrypt_blocks aes_v8_ctr32_encrypt_blocks | ||||
| #    define AES_PMULL_CAPABLE ((OPENSSL_armcap_P & ARMV8_PMULL) && (OPENSSL_armcap_P & ARMV8_AES)) | ||||
| #    define AES_GCM_ENC_BYTES 512 | ||||
| #    define AES_GCM_DEC_BYTES 512 | ||||
| #    if __ARM_MAX_ARCH__>=8 && (defined(__aarch64__) || defined(_M_ARM64)) | ||||
| #     define AES_gcm_encrypt armv8_aes_gcm_encrypt | ||||
| #     define AES_gcm_decrypt armv8_aes_gcm_decrypt | ||||
| #     define AES_GCM_ASM(gctx) ((gctx)->ctr==aes_v8_ctr32_encrypt_blocks && \ | ||||
|                                 (gctx)->gcm.funcs.ghash==gcm_ghash_v8) | ||||
| /* The [unroll8_eor3_]aes_gcm_(enc|dec)_(128|192|256)_kernel() functions | ||||
|  * take input length in BITS and return number of BYTES processed */ | ||||
| size_t aes_gcm_enc_128_kernel(const uint8_t *plaintext, uint64_t plaintext_length, uint8_t *ciphertext, | ||||
|                               uint64_t *Xi, unsigned char ivec[16], const void *key); | ||||
| size_t aes_gcm_enc_192_kernel(const uint8_t *plaintext, uint64_t plaintext_length, uint8_t *ciphertext, | ||||
|                               uint64_t *Xi, unsigned char ivec[16], const void *key); | ||||
| size_t aes_gcm_enc_256_kernel(const uint8_t *plaintext, uint64_t plaintext_length, uint8_t *ciphertext, | ||||
|                               uint64_t *Xi, unsigned char ivec[16], const void *key); | ||||
| size_t aes_gcm_dec_128_kernel(const uint8_t *ciphertext, uint64_t plaintext_length, uint8_t *plaintext, | ||||
|                               uint64_t *Xi, unsigned char ivec[16], const void *key); | ||||
| size_t aes_gcm_dec_192_kernel(const uint8_t *ciphertext, uint64_t plaintext_length, uint8_t *plaintext, | ||||
|                               uint64_t *Xi, unsigned char ivec[16], const void *key); | ||||
| size_t aes_gcm_dec_256_kernel(const uint8_t *ciphertext, uint64_t plaintext_length, uint8_t *plaintext, | ||||
|                               uint64_t *Xi, unsigned char ivec[16], const void *key); | ||||
| size_t unroll8_eor3_aes_gcm_enc_128_kernel(const uint8_t *plaintext, uint64_t plaintext_length, uint8_t *ciphertext, | ||||
|                               uint64_t *Xi, unsigned char ivec[16], const void *key); | ||||
| size_t unroll8_eor3_aes_gcm_enc_192_kernel(const uint8_t *plaintext, uint64_t plaintext_length, uint8_t *ciphertext, | ||||
|                               uint64_t *Xi, unsigned char ivec[16], const void *key); | ||||
| size_t unroll8_eor3_aes_gcm_enc_256_kernel(const uint8_t *plaintext, uint64_t plaintext_length, uint8_t *ciphertext, | ||||
|                               uint64_t *Xi, unsigned char ivec[16], const void *key); | ||||
| size_t unroll8_eor3_aes_gcm_dec_128_kernel(const uint8_t *ciphertext, uint64_t plaintext_length, uint8_t *plaintext, | ||||
|                               uint64_t *Xi, unsigned char ivec[16], const void *key); | ||||
| size_t unroll8_eor3_aes_gcm_dec_192_kernel(const uint8_t *ciphertext, uint64_t plaintext_length, uint8_t *plaintext, | ||||
|                               uint64_t *Xi, unsigned char ivec[16], const void *key); | ||||
| size_t unroll8_eor3_aes_gcm_dec_256_kernel(const uint8_t *ciphertext, uint64_t plaintext_length, uint8_t *plaintext, | ||||
|                               uint64_t *Xi, unsigned char ivec[16], const void *key); | ||||
| size_t armv8_aes_gcm_encrypt(const unsigned char *in, unsigned char *out, size_t len, const void *key, | ||||
|                              unsigned char ivec[16], u64 *Xi); | ||||
| size_t armv8_aes_gcm_decrypt(const unsigned char *in, unsigned char *out, size_t len, const void *key, | ||||
|                              unsigned char ivec[16], u64 *Xi); | ||||
| void gcm_ghash_v8(u64 Xi[2],const u128 Htable[16],const u8 *inp, size_t len); | ||||
| #    endif | ||||
| #   endif | ||||
| #  endif | ||||
| # endif /* OPENSSL_CPUID_OBJ */ | ||||
|  | ||||
| # if     defined(AES_ASM) &&     ( \ | ||||
|          defined(__x86_64)       || defined(__x86_64__)  || \ | ||||
|          defined(_M_AMD64)       || defined(_M_X64)      ) | ||||
| #  define AES_CBC_HMAC_SHA_CAPABLE 1 | ||||
| #  define AESNI_CBC_HMAC_SHA_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(57-32))) | ||||
| # endif | ||||
|  | ||||
| # if defined(__loongarch__) || defined(__loongarch64) | ||||
| #  include "loongarch_arch.h" | ||||
| #  if defined(VPAES_ASM) | ||||
| #   define VPAES_CAPABLE  (OPENSSL_loongarch_hwcap_P & LOONGARCH_HWCAP_LSX) | ||||
| #  endif | ||||
| # endif | ||||
|  | ||||
| # if     defined(AES_ASM) && !defined(I386_ONLY) &&      (  \ | ||||
|          ((defined(__i386)       || defined(__i386__)    || \ | ||||
|            defined(_M_IX86)) && defined(OPENSSL_IA32_SSE2))|| \ | ||||
|          defined(__x86_64)       || defined(__x86_64__)  || \ | ||||
|          defined(_M_AMD64)       || defined(_M_X64)      ) | ||||
|  | ||||
| /* AES-NI section */ | ||||
|  | ||||
| #  define AESNI_CAPABLE   (OPENSSL_ia32cap_P[1]&(1<<(57-32))) | ||||
| #  ifdef VPAES_ASM | ||||
| #   define VPAES_CAPABLE   (OPENSSL_ia32cap_P[1]&(1<<(41-32))) | ||||
| #  endif | ||||
| #  ifdef BSAES_ASM | ||||
| #   define BSAES_CAPABLE   (OPENSSL_ia32cap_P[1]&(1<<(41-32))) | ||||
| #  endif | ||||
|  | ||||
| #  define AES_GCM_ENC_BYTES 32 | ||||
| #  define AES_GCM_DEC_BYTES 16 | ||||
|  | ||||
| int aesni_set_encrypt_key(const unsigned char *userKey, int bits, | ||||
|                           AES_KEY *key); | ||||
| int aesni_set_decrypt_key(const unsigned char *userKey, int bits, | ||||
|                           AES_KEY *key); | ||||
|  | ||||
| void aesni_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                    const AES_KEY *key); | ||||
| void aesni_decrypt(const unsigned char *in, unsigned char *out, | ||||
|                    const AES_KEY *key); | ||||
|  | ||||
| void aesni_ecb_encrypt(const unsigned char *in, | ||||
|                        unsigned char *out, | ||||
|                        size_t length, const AES_KEY *key, int enc); | ||||
| void aesni_cbc_encrypt(const unsigned char *in, | ||||
|                        unsigned char *out, | ||||
|                        size_t length, | ||||
|                        const AES_KEY *key, unsigned char *ivec, int enc); | ||||
| #  ifndef OPENSSL_NO_OCB | ||||
| void aesni_ocb_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                        size_t blocks, const void *key, | ||||
|                        size_t start_block_num, | ||||
|                        unsigned char offset_i[16], | ||||
|                        const unsigned char L_[][16], | ||||
|                        unsigned char checksum[16]); | ||||
| void aesni_ocb_decrypt(const unsigned char *in, unsigned char *out, | ||||
|                        size_t blocks, const void *key, | ||||
|                        size_t start_block_num, | ||||
|                        unsigned char offset_i[16], | ||||
|                        const unsigned char L_[][16], | ||||
|                        unsigned char checksum[16]); | ||||
| #  endif /* OPENSSL_NO_OCB */ | ||||
|  | ||||
| void aesni_ctr32_encrypt_blocks(const unsigned char *in, | ||||
|                                 unsigned char *out, | ||||
|                                 size_t blocks, | ||||
|                                 const void *key, const unsigned char *ivec); | ||||
|  | ||||
| void aesni_xts_encrypt(const unsigned char *in, | ||||
|                        unsigned char *out, | ||||
|                        size_t length, | ||||
|                        const AES_KEY *key1, const AES_KEY *key2, | ||||
|                        const unsigned char iv[16]); | ||||
|  | ||||
| void aesni_xts_decrypt(const unsigned char *in, | ||||
|                        unsigned char *out, | ||||
|                        size_t length, | ||||
|                        const AES_KEY *key1, const AES_KEY *key2, | ||||
|                        const unsigned char iv[16]); | ||||
|  | ||||
| void aesni_ccm64_encrypt_blocks(const unsigned char *in, | ||||
|                                 unsigned char *out, | ||||
|                                 size_t blocks, | ||||
|                                 const void *key, | ||||
|                                 const unsigned char ivec[16], | ||||
|                                 unsigned char cmac[16]); | ||||
|  | ||||
| void aesni_ccm64_decrypt_blocks(const unsigned char *in, | ||||
|                                 unsigned char *out, | ||||
|                                 size_t blocks, | ||||
|                                 const void *key, | ||||
|                                 const unsigned char ivec[16], | ||||
|                                 unsigned char cmac[16]); | ||||
|  | ||||
| #  if defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(_M_X64) | ||||
| size_t aesni_gcm_encrypt(const unsigned char *in, unsigned char *out, size_t len, | ||||
|                          const void *key, unsigned char ivec[16], u64 *Xi); | ||||
| size_t aesni_gcm_decrypt(const unsigned char *in, unsigned char *out, size_t len, | ||||
|                          const void *key, unsigned char ivec[16], u64 *Xi); | ||||
| void gcm_ghash_avx(u64 Xi[2], const u128 Htable[16], const u8 *in, size_t len); | ||||
|  | ||||
| #   define AES_gcm_encrypt aesni_gcm_encrypt | ||||
| #   define AES_gcm_decrypt aesni_gcm_decrypt | ||||
| #   define AES_GCM_ASM(ctx)    (ctx->ctr == aesni_ctr32_encrypt_blocks && \ | ||||
|                                 ctx->gcm.funcs.ghash == gcm_ghash_avx) | ||||
| #  endif | ||||
|  | ||||
|  | ||||
| # elif defined(AES_ASM) && (defined(__sparc) || defined(__sparc__)) | ||||
|  | ||||
| /* Fujitsu SPARC64 X support */ | ||||
| #  include "crypto/sparc_arch.h" | ||||
|  | ||||
| #  define SPARC_AES_CAPABLE       (OPENSSL_sparcv9cap_P[1] & CFR_AES) | ||||
| #  define HWAES_CAPABLE           (OPENSSL_sparcv9cap_P[0] & SPARCV9_FJAESX) | ||||
| #  define HWAES_set_encrypt_key aes_fx_set_encrypt_key | ||||
| #  define HWAES_set_decrypt_key aes_fx_set_decrypt_key | ||||
| #  define HWAES_encrypt aes_fx_encrypt | ||||
| #  define HWAES_decrypt aes_fx_decrypt | ||||
| #  define HWAES_cbc_encrypt aes_fx_cbc_encrypt | ||||
| #  define HWAES_ctr32_encrypt_blocks aes_fx_ctr32_encrypt_blocks | ||||
|  | ||||
| void aes_t4_set_encrypt_key(const unsigned char *key, int bits, AES_KEY *ks); | ||||
| void aes_t4_set_decrypt_key(const unsigned char *key, int bits, AES_KEY *ks); | ||||
| void aes_t4_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                     const AES_KEY *key); | ||||
| void aes_t4_decrypt(const unsigned char *in, unsigned char *out, | ||||
|                     const AES_KEY *key); | ||||
| /* | ||||
|  * Key-length specific subroutines were chosen for following reason. | ||||
|  * Each SPARC T4 core can execute up to 8 threads which share core's | ||||
|  * resources. Loading as much key material to registers allows to | ||||
|  * minimize references to shared memory interface, as well as amount | ||||
|  * of instructions in inner loops [much needed on T4]. But then having | ||||
|  * non-key-length specific routines would require conditional branches | ||||
|  * either in inner loops or on subroutines' entries. Former is hardly | ||||
|  * acceptable, while latter means code size increase to size occupied | ||||
|  * by multiple key-length specific subroutines, so why fight? | ||||
|  */ | ||||
| void aes128_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                            size_t len, const AES_KEY *key, | ||||
|                            unsigned char *ivec, int /*unused*/); | ||||
| void aes128_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, | ||||
|                            size_t len, const AES_KEY *key, | ||||
|                            unsigned char *ivec, int /*unused*/); | ||||
| void aes192_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                            size_t len, const AES_KEY *key, | ||||
|                            unsigned char *ivec, int /*unused*/); | ||||
| void aes192_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, | ||||
|                            size_t len, const AES_KEY *key, | ||||
|                            unsigned char *ivec, int /*unused*/); | ||||
| void aes256_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                            size_t len, const AES_KEY *key, | ||||
|                            unsigned char *ivec, int /*unused*/); | ||||
| void aes256_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, | ||||
|                            size_t len, const AES_KEY *key, | ||||
|                            unsigned char *ivec, int /*unused*/); | ||||
| void aes128_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                              size_t blocks, const AES_KEY *key, | ||||
|                              unsigned char *ivec); | ||||
| void aes192_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                              size_t blocks, const AES_KEY *key, | ||||
|                              unsigned char *ivec); | ||||
| void aes256_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                              size_t blocks, const AES_KEY *key, | ||||
|                              unsigned char *ivec); | ||||
| void aes128_t4_xts_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                            size_t blocks, const AES_KEY *key1, | ||||
|                            const AES_KEY *key2, const unsigned char *ivec); | ||||
| void aes128_t4_xts_decrypt(const unsigned char *in, unsigned char *out, | ||||
|                            size_t blocks, const AES_KEY *key1, | ||||
|                            const AES_KEY *key2, const unsigned char *ivec); | ||||
| void aes256_t4_xts_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                            size_t blocks, const AES_KEY *key1, | ||||
|                            const AES_KEY *key2, const unsigned char *ivec); | ||||
| void aes256_t4_xts_decrypt(const unsigned char *in, unsigned char *out, | ||||
|                            size_t blocks, const AES_KEY *key1, | ||||
|                            const AES_KEY *key2, const unsigned char *ivec); | ||||
|  | ||||
| # elif defined(OPENSSL_CPUID_OBJ) && defined(__s390__) | ||||
| /* IBM S390X support */ | ||||
| #  include "s390x_arch.h" | ||||
|  | ||||
|  | ||||
| /* Convert key size to function code: [16,24,32] -> [18,19,20]. */ | ||||
| #  define S390X_AES_FC(keylen)  (S390X_AES_128 + ((((keylen) << 3) - 128) >> 6)) | ||||
|  | ||||
| /* Most modes of operation need km for partial block processing. */ | ||||
| #  define S390X_aes_128_CAPABLE (OPENSSL_s390xcap_P.km[0] &  \ | ||||
|                                 S390X_CAPBIT(S390X_AES_128)) | ||||
| #  define S390X_aes_192_CAPABLE (OPENSSL_s390xcap_P.km[0] &  \ | ||||
|                                 S390X_CAPBIT(S390X_AES_192)) | ||||
| #  define S390X_aes_256_CAPABLE (OPENSSL_s390xcap_P.km[0] &  \ | ||||
|                                 S390X_CAPBIT(S390X_AES_256)) | ||||
|  | ||||
| #  define S390X_aes_128_cbc_CAPABLE     1       /* checked by callee */ | ||||
| #  define S390X_aes_192_cbc_CAPABLE     1 | ||||
| #  define S390X_aes_256_cbc_CAPABLE     1 | ||||
|  | ||||
| #  define S390X_aes_128_ecb_CAPABLE     S390X_aes_128_CAPABLE | ||||
| #  define S390X_aes_192_ecb_CAPABLE     S390X_aes_192_CAPABLE | ||||
| #  define S390X_aes_256_ecb_CAPABLE     S390X_aes_256_CAPABLE | ||||
|  | ||||
| #  define S390X_aes_128_ofb_CAPABLE (S390X_aes_128_CAPABLE &&           \ | ||||
|                                     (OPENSSL_s390xcap_P.kmo[0] &        \ | ||||
|                                      S390X_CAPBIT(S390X_AES_128))) | ||||
| #  define S390X_aes_192_ofb_CAPABLE (S390X_aes_192_CAPABLE &&           \ | ||||
|                                     (OPENSSL_s390xcap_P.kmo[0] &        \ | ||||
|                                      S390X_CAPBIT(S390X_AES_192))) | ||||
| #  define S390X_aes_256_ofb_CAPABLE (S390X_aes_256_CAPABLE &&           \ | ||||
|                                     (OPENSSL_s390xcap_P.kmo[0] &        \ | ||||
|                                      S390X_CAPBIT(S390X_AES_256))) | ||||
|  | ||||
| #  define S390X_aes_128_cfb_CAPABLE (S390X_aes_128_CAPABLE &&           \ | ||||
|                                     (OPENSSL_s390xcap_P.kmf[0] &        \ | ||||
|                                      S390X_CAPBIT(S390X_AES_128))) | ||||
| #  define S390X_aes_192_cfb_CAPABLE (S390X_aes_192_CAPABLE &&           \ | ||||
|                                     (OPENSSL_s390xcap_P.kmf[0] &        \ | ||||
|                                      S390X_CAPBIT(S390X_AES_192))) | ||||
| #  define S390X_aes_256_cfb_CAPABLE (S390X_aes_256_CAPABLE &&           \ | ||||
|                                     (OPENSSL_s390xcap_P.kmf[0] &        \ | ||||
|                                      S390X_CAPBIT(S390X_AES_256))) | ||||
| #  define S390X_aes_128_cfb8_CAPABLE (OPENSSL_s390xcap_P.kmf[0] &       \ | ||||
|                                      S390X_CAPBIT(S390X_AES_128)) | ||||
| #  define S390X_aes_192_cfb8_CAPABLE (OPENSSL_s390xcap_P.kmf[0] &       \ | ||||
|                                      S390X_CAPBIT(S390X_AES_192)) | ||||
| #  define S390X_aes_256_cfb8_CAPABLE (OPENSSL_s390xcap_P.kmf[0] &       \ | ||||
|                                      S390X_CAPBIT(S390X_AES_256)) | ||||
| #  define S390X_aes_128_cfb1_CAPABLE    0 | ||||
| #  define S390X_aes_192_cfb1_CAPABLE    0 | ||||
| #  define S390X_aes_256_cfb1_CAPABLE    0 | ||||
|  | ||||
| #  define S390X_aes_128_ctr_CAPABLE     1       /* checked by callee */ | ||||
| #  define S390X_aes_192_ctr_CAPABLE     1 | ||||
| #  define S390X_aes_256_ctr_CAPABLE     1 | ||||
|  | ||||
| #  define S390X_aes_128_xts_CAPABLE     1       /* checked by callee */ | ||||
| #  define S390X_aes_256_xts_CAPABLE     1 | ||||
|  | ||||
| # define S390X_aes_128_gcm_CAPABLE (S390X_aes_128_CAPABLE &&        \ | ||||
|                                     (OPENSSL_s390xcap_P.kma[0] &    \ | ||||
|                                      S390X_CAPBIT(S390X_AES_128))) | ||||
| # define S390X_aes_192_gcm_CAPABLE (S390X_aes_192_CAPABLE &&        \ | ||||
|                                     (OPENSSL_s390xcap_P.kma[0] &    \ | ||||
|                                      S390X_CAPBIT(S390X_AES_192))) | ||||
| # define S390X_aes_256_gcm_CAPABLE (S390X_aes_256_CAPABLE &&        \ | ||||
|                                     (OPENSSL_s390xcap_P.kma[0] &    \ | ||||
|                                      S390X_CAPBIT(S390X_AES_256))) | ||||
|  | ||||
| #  define S390X_aes_128_ccm_CAPABLE (S390X_aes_128_CAPABLE &&       \ | ||||
|                                     (OPENSSL_s390xcap_P.kmac[0] &   \ | ||||
|                                      S390X_CAPBIT(S390X_AES_128))) | ||||
| #  define S390X_aes_192_ccm_CAPABLE (S390X_aes_192_CAPABLE &&       \ | ||||
|                                     (OPENSSL_s390xcap_P.kmac[0] &   \ | ||||
|                                      S390X_CAPBIT(S390X_AES_192))) | ||||
| #  define S390X_aes_256_ccm_CAPABLE (S390X_aes_256_CAPABLE &&       \ | ||||
|                                     (OPENSSL_s390xcap_P.kmac[0] &   \ | ||||
|                                      S390X_CAPBIT(S390X_AES_256))) | ||||
| #  define S390X_CCM_AAD_FLAG    0x40 | ||||
|  | ||||
| #  ifndef OPENSSL_NO_OCB | ||||
| #   define S390X_aes_128_ocb_CAPABLE    0 | ||||
| #   define S390X_aes_192_ocb_CAPABLE    0 | ||||
| #   define S390X_aes_256_ocb_CAPABLE    0 | ||||
| #  endif /* OPENSSL_NO_OCB */ | ||||
|  | ||||
| #  ifndef OPENSSL_NO_SIV | ||||
| #   define S390X_aes_128_siv_CAPABLE    0 | ||||
| #   define S390X_aes_192_siv_CAPABLE    0 | ||||
| #   define S390X_aes_256_siv_CAPABLE    0 | ||||
| #  endif /* OPENSSL_NO_SIV */ | ||||
|  | ||||
| /* Convert key size to function code: [16,24,32] -> [18,19,20]. */ | ||||
| #  define S390X_AES_FC(keylen)  (S390X_AES_128 + ((((keylen) << 3) - 128) >> 6)) | ||||
| # elif defined(OPENSSL_CPUID_OBJ) && defined(__riscv) && __riscv_xlen == 64 | ||||
| /* RISC-V 64 support */ | ||||
| #  include "riscv_arch.h" | ||||
|  | ||||
| int rv64i_zkne_set_encrypt_key(const unsigned char *userKey, const int bits, | ||||
|                           AES_KEY *key); | ||||
| int rv64i_zknd_set_decrypt_key(const unsigned char *userKey, const int bits, | ||||
|                           AES_KEY *key); | ||||
| void rv64i_zkne_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                    const AES_KEY *key); | ||||
| void rv64i_zknd_decrypt(const unsigned char *in, unsigned char *out, | ||||
|                    const AES_KEY *key); | ||||
| # elif defined(OPENSSL_CPUID_OBJ) && defined(__riscv) && __riscv_xlen == 32 | ||||
| /* RISC-V 32 support */ | ||||
| #  include "riscv_arch.h" | ||||
|  | ||||
| int rv32i_zkne_set_encrypt_key(const unsigned char *userKey, const int bits, | ||||
|                                AES_KEY *key); | ||||
| /* set_decrypt_key needs both zknd and zkne */ | ||||
| int rv32i_zknd_zkne_set_decrypt_key(const unsigned char *userKey, const int bits, | ||||
|                                     AES_KEY *key); | ||||
| int rv32i_zbkb_zkne_set_encrypt_key(const unsigned char *userKey, const int bits, | ||||
|                                     AES_KEY *key); | ||||
| int rv32i_zbkb_zknd_zkne_set_decrypt_key(const unsigned char *userKey, const int bits, | ||||
|                                          AES_KEY *key); | ||||
| void rv32i_zkne_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                         const AES_KEY *key); | ||||
| void rv32i_zknd_decrypt(const unsigned char *in, unsigned char *out, | ||||
|                         const AES_KEY *key); | ||||
| # endif | ||||
|  | ||||
| # if defined(HWAES_CAPABLE) | ||||
| int HWAES_set_encrypt_key(const unsigned char *userKey, const int bits, | ||||
|                           AES_KEY *key); | ||||
| int HWAES_set_decrypt_key(const unsigned char *userKey, const int bits, | ||||
|                           AES_KEY *key); | ||||
| void HWAES_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                    const AES_KEY *key); | ||||
| void HWAES_decrypt(const unsigned char *in, unsigned char *out, | ||||
|                    const AES_KEY *key); | ||||
| void HWAES_cbc_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                        size_t length, const AES_KEY *key, | ||||
|                        unsigned char *ivec, const int enc); | ||||
| void HWAES_ecb_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                        size_t length, const AES_KEY *key, | ||||
|                        const int enc); | ||||
| void HWAES_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out, | ||||
|                                 size_t len, const void *key, | ||||
|                                 const unsigned char ivec[16]); | ||||
| void HWAES_xts_encrypt(const unsigned char *inp, unsigned char *out, | ||||
|                        size_t len, const AES_KEY *key1, | ||||
|                        const AES_KEY *key2, const unsigned char iv[16]); | ||||
| void HWAES_xts_decrypt(const unsigned char *inp, unsigned char *out, | ||||
|                        size_t len, const AES_KEY *key1, | ||||
|                        const AES_KEY *key2, const unsigned char iv[16]); | ||||
| #  ifndef OPENSSL_NO_OCB | ||||
| #   ifdef HWAES_ocb_encrypt | ||||
| void HWAES_ocb_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                        size_t blocks, const void *key, | ||||
|                        size_t start_block_num, | ||||
|                        unsigned char offset_i[16], | ||||
|                        const unsigned char L_[][16], | ||||
|                        unsigned char checksum[16]); | ||||
| #   else | ||||
| #     define HWAES_ocb_encrypt ((ocb128_f)NULL) | ||||
| #   endif | ||||
| #   ifdef HWAES_ocb_decrypt | ||||
| void HWAES_ocb_decrypt(const unsigned char *in, unsigned char *out, | ||||
|                        size_t blocks, const void *key, | ||||
|                        size_t start_block_num, | ||||
|                        unsigned char offset_i[16], | ||||
|                        const unsigned char L_[][16], | ||||
|                        unsigned char checksum[16]); | ||||
| #   else | ||||
| #     define HWAES_ocb_decrypt ((ocb128_f)NULL) | ||||
| #   endif | ||||
| #  endif /* OPENSSL_NO_OCB */ | ||||
|  | ||||
| # endif /* HWAES_CAPABLE */ | ||||
|  | ||||
| #endif /* OSSL_AES_PLATFORM_H */ | ||||
| @@ -1,51 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2006-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * Copyright (c) 2017, Oracle and/or its affiliates.  All rights reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
|  /* Copyright (c) 2017 National Security Research Institute.  All rights reserved. */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_ARIA_H | ||||
| # define OSSL_CRYPTO_ARIA_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
|  | ||||
| # ifdef OPENSSL_NO_ARIA | ||||
| #  error ARIA is disabled. | ||||
| # endif | ||||
|  | ||||
| # define ARIA_ENCRYPT     1 | ||||
| # define ARIA_DECRYPT     0 | ||||
|  | ||||
| # define ARIA_BLOCK_SIZE    16  /* Size of each encryption/decryption block */ | ||||
| # define ARIA_MAX_KEYS      17  /* Number of keys needed in the worst case  */ | ||||
|  | ||||
| typedef union { | ||||
|     unsigned char c[ARIA_BLOCK_SIZE]; | ||||
|     unsigned int u[ARIA_BLOCK_SIZE / sizeof(unsigned int)]; | ||||
| } ARIA_u128; | ||||
|  | ||||
| typedef unsigned char ARIA_c128[ARIA_BLOCK_SIZE]; | ||||
|  | ||||
| struct aria_key_st { | ||||
|     ARIA_u128 rd_key[ARIA_MAX_KEYS]; | ||||
|     unsigned int rounds; | ||||
| }; | ||||
| typedef struct aria_key_st ARIA_KEY; | ||||
|  | ||||
|  | ||||
| int ossl_aria_set_encrypt_key(const unsigned char *userKey, const int bits, | ||||
|                               ARIA_KEY *key); | ||||
| int ossl_aria_set_decrypt_key(const unsigned char *userKey, const int bits, | ||||
|                               ARIA_KEY *key); | ||||
|  | ||||
| void ossl_aria_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                        const ARIA_KEY *key); | ||||
|  | ||||
| #endif | ||||
| @@ -1,153 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2015-2023 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_ASN1_H | ||||
| # define OSSL_CRYPTO_ASN1_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/asn1.h> | ||||
| # include <openssl/core_dispatch.h> /* OSSL_FUNC_keymgmt_import() */ | ||||
|  | ||||
| /* Internal ASN1 structures and functions: not for application use */ | ||||
|  | ||||
| /* ASN1 public key method structure */ | ||||
|  | ||||
| #include <openssl/core.h> | ||||
|  | ||||
| struct evp_pkey_asn1_method_st { | ||||
|     int pkey_id; | ||||
|     int pkey_base_id; | ||||
|     unsigned long pkey_flags; | ||||
|     char *pem_str; | ||||
|     char *info; | ||||
|     int (*pub_decode) (EVP_PKEY *pk, const X509_PUBKEY *pub); | ||||
|     int (*pub_encode) (X509_PUBKEY *pub, const EVP_PKEY *pk); | ||||
|     int (*pub_cmp) (const EVP_PKEY *a, const EVP_PKEY *b); | ||||
|     int (*pub_print) (BIO *out, const EVP_PKEY *pkey, int indent, | ||||
|                       ASN1_PCTX *pctx); | ||||
|     int (*priv_decode) (EVP_PKEY *pk, const PKCS8_PRIV_KEY_INFO *p8inf); | ||||
|     int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pk); | ||||
|     int (*priv_print) (BIO *out, const EVP_PKEY *pkey, int indent, | ||||
|                        ASN1_PCTX *pctx); | ||||
|     int (*pkey_size) (const EVP_PKEY *pk); | ||||
|     int (*pkey_bits) (const EVP_PKEY *pk); | ||||
|     int (*pkey_security_bits) (const EVP_PKEY *pk); | ||||
|     int (*param_decode) (EVP_PKEY *pkey, | ||||
|                          const unsigned char **pder, int derlen); | ||||
|     int (*param_encode) (const EVP_PKEY *pkey, unsigned char **pder); | ||||
|     int (*param_missing) (const EVP_PKEY *pk); | ||||
|     int (*param_copy) (EVP_PKEY *to, const EVP_PKEY *from); | ||||
|     int (*param_cmp) (const EVP_PKEY *a, const EVP_PKEY *b); | ||||
|     int (*param_print) (BIO *out, const EVP_PKEY *pkey, int indent, | ||||
|                         ASN1_PCTX *pctx); | ||||
|     int (*sig_print) (BIO *out, | ||||
|                       const X509_ALGOR *sigalg, const ASN1_STRING *sig, | ||||
|                       int indent, ASN1_PCTX *pctx); | ||||
|     void (*pkey_free) (EVP_PKEY *pkey); | ||||
|     int (*pkey_ctrl) (EVP_PKEY *pkey, int op, long arg1, void *arg2); | ||||
|     /* Legacy functions for old PEM */ | ||||
|     int (*old_priv_decode) (EVP_PKEY *pkey, | ||||
|                             const unsigned char **pder, int derlen); | ||||
|     int (*old_priv_encode) (const EVP_PKEY *pkey, unsigned char **pder); | ||||
|     /* Custom ASN1 signature verification */ | ||||
|     int (*item_verify) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, const void *data, | ||||
|                         const X509_ALGOR *a, const ASN1_BIT_STRING *sig, | ||||
|                         EVP_PKEY *pkey); | ||||
|     int (*item_sign) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, const void *data, | ||||
|                       X509_ALGOR *alg1, X509_ALGOR *alg2, | ||||
|                       ASN1_BIT_STRING *sig); | ||||
|     int (*siginf_set) (X509_SIG_INFO *siginf, const X509_ALGOR *alg, | ||||
|                        const ASN1_STRING *sig); | ||||
|     /* Check */ | ||||
|     int (*pkey_check) (const EVP_PKEY *pk); | ||||
|     int (*pkey_public_check) (const EVP_PKEY *pk); | ||||
|     int (*pkey_param_check) (const EVP_PKEY *pk); | ||||
|     /* Get/set raw private/public key data */ | ||||
|     int (*set_priv_key) (EVP_PKEY *pk, const unsigned char *priv, size_t len); | ||||
|     int (*set_pub_key) (EVP_PKEY *pk, const unsigned char *pub, size_t len); | ||||
|     int (*get_priv_key) (const EVP_PKEY *pk, unsigned char *priv, size_t *len); | ||||
|     int (*get_pub_key) (const EVP_PKEY *pk, unsigned char *pub, size_t *len); | ||||
|  | ||||
|     /* Exports and imports to / from providers */ | ||||
|     size_t (*dirty_cnt) (const EVP_PKEY *pk); | ||||
|     int (*export_to) (const EVP_PKEY *pk, void *to_keydata, | ||||
|                       OSSL_FUNC_keymgmt_import_fn *importer, | ||||
|                       OSSL_LIB_CTX *libctx, const char *propq); | ||||
|     OSSL_CALLBACK *import_from; | ||||
|     int (*copy) (EVP_PKEY *to, EVP_PKEY *from); | ||||
|  | ||||
|     int (*priv_decode_ex) (EVP_PKEY *pk, | ||||
|                                     const PKCS8_PRIV_KEY_INFO *p8inf, | ||||
|                                     OSSL_LIB_CTX *libctx, | ||||
|                                     const char *propq); | ||||
| } /* EVP_PKEY_ASN1_METHOD */ ; | ||||
|  | ||||
| DEFINE_STACK_OF_CONST(EVP_PKEY_ASN1_METHOD) | ||||
|  | ||||
| extern const EVP_PKEY_ASN1_METHOD ossl_dh_asn1_meth; | ||||
| extern const EVP_PKEY_ASN1_METHOD ossl_dhx_asn1_meth; | ||||
| extern const EVP_PKEY_ASN1_METHOD ossl_dsa_asn1_meths[5]; | ||||
| extern const EVP_PKEY_ASN1_METHOD ossl_eckey_asn1_meth; | ||||
| extern const EVP_PKEY_ASN1_METHOD ossl_ecx25519_asn1_meth; | ||||
| extern const EVP_PKEY_ASN1_METHOD ossl_ecx448_asn1_meth; | ||||
| extern const EVP_PKEY_ASN1_METHOD ossl_ed25519_asn1_meth; | ||||
| extern const EVP_PKEY_ASN1_METHOD ossl_ed448_asn1_meth; | ||||
| extern const EVP_PKEY_ASN1_METHOD ossl_sm2_asn1_meth; | ||||
|  | ||||
| extern const EVP_PKEY_ASN1_METHOD ossl_rsa_asn1_meths[2]; | ||||
| extern const EVP_PKEY_ASN1_METHOD ossl_rsa_pss_asn1_meth; | ||||
|  | ||||
| /* | ||||
|  * These are used internally in the ASN1_OBJECT to keep track of whether the | ||||
|  * names and data need to be free()ed | ||||
|  */ | ||||
| # define ASN1_OBJECT_FLAG_DYNAMIC         0x01/* internal use */ | ||||
| # define ASN1_OBJECT_FLAG_CRITICAL        0x02/* critical x509v3 object id */ | ||||
| # define ASN1_OBJECT_FLAG_DYNAMIC_STRINGS 0x04/* internal use */ | ||||
| # define ASN1_OBJECT_FLAG_DYNAMIC_DATA    0x08/* internal use */ | ||||
| struct asn1_object_st { | ||||
|     const char *sn, *ln; | ||||
|     int nid; | ||||
|     int length; | ||||
|     const unsigned char *data;  /* data remains const after init */ | ||||
|     int flags;                  /* Should we free this one */ | ||||
| }; | ||||
|  | ||||
| /* ASN1 print context structure */ | ||||
|  | ||||
| struct asn1_pctx_st { | ||||
|     unsigned long flags; | ||||
|     unsigned long nm_flags; | ||||
|     unsigned long cert_flags; | ||||
|     unsigned long oid_flags; | ||||
|     unsigned long str_flags; | ||||
| } /* ASN1_PCTX */ ; | ||||
|  | ||||
| /* ASN1 type functions */ | ||||
|  | ||||
| int ossl_asn1_type_set_octetstring_int(ASN1_TYPE *a, long num, | ||||
|                                        unsigned char *data, int len); | ||||
| int ossl_asn1_type_get_octetstring_int(const ASN1_TYPE *a, long *num, | ||||
|                                        unsigned char *data, int max_len); | ||||
|  | ||||
| int ossl_x509_algor_new_from_md(X509_ALGOR **palg, const EVP_MD *md); | ||||
| const EVP_MD *ossl_x509_algor_get_md(X509_ALGOR *alg); | ||||
| X509_ALGOR *ossl_x509_algor_mgf1_decode(X509_ALGOR *alg); | ||||
| int ossl_x509_algor_md_to_mgf1(X509_ALGOR **palg, const EVP_MD *mgf1md); | ||||
| int ossl_asn1_time_print_ex(BIO *bp, const ASN1_TIME *tm, unsigned long flags); | ||||
|  | ||||
| EVP_PKEY *ossl_d2i_PrivateKey_legacy(int keytype, EVP_PKEY **a, | ||||
|                                      const unsigned char **pp, long length, | ||||
|                                      OSSL_LIB_CTX *libctx, const char *propq); | ||||
| X509_ALGOR *ossl_X509_ALGOR_from_nid(int nid, int ptype, void *pval); | ||||
|  | ||||
| time_t ossl_asn1_string_to_time_t(const char *asn1_string); | ||||
| void ossl_asn1_string_set_bits_left(ASN1_STRING *str, unsigned int num); | ||||
|  | ||||
| #endif /* ndef OSSL_CRYPTO_ASN1_H */ | ||||
| @@ -1,24 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_ASN1_DSA_H | ||||
| # define OSSL_CRYPTO_ASN1_DSA_H | ||||
| # pragma once | ||||
|  | ||||
| #include "internal/packet.h" | ||||
|  | ||||
| int ossl_encode_der_length(WPACKET *pkt, size_t cont_len); | ||||
| int ossl_encode_der_integer(WPACKET *pkt, const BIGNUM *n); | ||||
| int ossl_encode_der_dsa_sig(WPACKET *pkt, const BIGNUM *r, const BIGNUM *s); | ||||
| int ossl_decode_der_length(PACKET *pkt, PACKET *subpkt); | ||||
| int ossl_decode_der_integer(PACKET *pkt, BIGNUM *n); | ||||
| size_t ossl_decode_der_dsa_sig(BIGNUM *r, BIGNUM *s, const unsigned char **ppin, | ||||
|                                size_t len); | ||||
|  | ||||
| #endif | ||||
| @@ -1,27 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_ASN1ERR_H | ||||
| # define OSSL_CRYPTO_ASN1ERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| int ossl_err_load_ASN1_strings(void); | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,19 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_ASYNC_H | ||||
| # define OSSL_CRYPTO_ASYNC_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/async.h> | ||||
|  | ||||
| int async_init(void); | ||||
| void async_deinit(void); | ||||
|  | ||||
| #endif | ||||
| @@ -1,27 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_ASYNCERR_H | ||||
| # define OSSL_CRYPTO_ASYNCERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| int ossl_err_load_ASYNC_strings(void); | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,27 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_BIOERR_H | ||||
| # define OSSL_CRYPTO_BIOERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| int ossl_err_load_BIO_strings(void); | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,128 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2014-2023 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_BN_H | ||||
| # define OSSL_CRYPTO_BN_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/bn.h> | ||||
| # include <limits.h> | ||||
|  | ||||
| BIGNUM *bn_wexpand(BIGNUM *a, int words); | ||||
| BIGNUM *bn_expand2(BIGNUM *a, int words); | ||||
|  | ||||
| void bn_correct_top(BIGNUM *a); | ||||
|  | ||||
| /* | ||||
|  * Determine the modified width-(w+1) Non-Adjacent Form (wNAF) of 'scalar'. | ||||
|  * This is an array r[] of values that are either zero or odd with an | ||||
|  * absolute value less than 2^w satisfying scalar = \sum_j r[j]*2^j where at | ||||
|  * most one of any w+1 consecutive digits is non-zero with the exception that | ||||
|  * the most significant digit may be only w-1 zeros away from that next | ||||
|  * non-zero digit. | ||||
|  */ | ||||
| signed char *bn_compute_wNAF(const BIGNUM *scalar, int w, size_t *ret_len); | ||||
|  | ||||
| int bn_get_top(const BIGNUM *a); | ||||
|  | ||||
| int bn_get_dmax(const BIGNUM *a); | ||||
|  | ||||
| /* Set all words to zero */ | ||||
| void bn_set_all_zero(BIGNUM *a); | ||||
|  | ||||
| /* | ||||
|  * Copy the internal BIGNUM words into out which holds size elements (and size | ||||
|  * must be bigger than top) | ||||
|  */ | ||||
| int bn_copy_words(BN_ULONG *out, const BIGNUM *in, int size); | ||||
|  | ||||
| BN_ULONG *bn_get_words(const BIGNUM *a); | ||||
|  | ||||
| /* | ||||
|  * Set the internal data words in a to point to words which contains size | ||||
|  * elements. The BN_FLG_STATIC_DATA flag is set | ||||
|  */ | ||||
| void bn_set_static_words(BIGNUM *a, const BN_ULONG *words, int size); | ||||
|  | ||||
| /* | ||||
|  * Copy words into the BIGNUM |a|, reallocating space as necessary. | ||||
|  * The negative flag of |a| is not modified. | ||||
|  * Returns 1 on success and 0 on failure. | ||||
|  */ | ||||
| /* | ||||
|  * |num_words| is int because bn_expand2 takes an int. This is an internal | ||||
|  * function so we simply trust callers not to pass negative values. | ||||
|  */ | ||||
| int bn_set_words(BIGNUM *a, const BN_ULONG *words, int num_words); | ||||
|  | ||||
| /* | ||||
|  * Some BIGNUM functions assume most significant limb to be non-zero, which | ||||
|  * is customarily arranged by bn_correct_top. Output from below functions | ||||
|  * is not processed with bn_correct_top, and for this reason it may not be | ||||
|  * returned out of public API. It may only be passed internally into other | ||||
|  * functions known to support non-minimal or zero-padded BIGNUMs. Even | ||||
|  * though the goal is to facilitate constant-time-ness, not each subroutine | ||||
|  * is constant-time by itself. They all have pre-conditions, consult source | ||||
|  * code... | ||||
|  */ | ||||
| int bn_mul_mont_fixed_top(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, | ||||
|                           BN_MONT_CTX *mont, BN_CTX *ctx); | ||||
| int bn_to_mont_fixed_top(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, | ||||
|                          BN_CTX *ctx); | ||||
| int bn_from_mont_fixed_top(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, | ||||
|                            BN_CTX *ctx); | ||||
| int bn_mod_add_fixed_top(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, | ||||
|                          const BIGNUM *m); | ||||
| int bn_mod_sub_fixed_top(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, | ||||
|                          const BIGNUM *m); | ||||
| int bn_mul_fixed_top(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); | ||||
| int bn_sqr_fixed_top(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx); | ||||
| int bn_lshift_fixed_top(BIGNUM *r, const BIGNUM *a, int n); | ||||
| int bn_rshift_fixed_top(BIGNUM *r, const BIGNUM *a, int n); | ||||
| int bn_div_fixed_top(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, | ||||
|                      const BIGNUM *d, BN_CTX *ctx); | ||||
|  | ||||
| #define BN_PRIMETEST_COMPOSITE                    0 | ||||
| #define BN_PRIMETEST_COMPOSITE_WITH_FACTOR        1 | ||||
| #define BN_PRIMETEST_COMPOSITE_NOT_POWER_OF_PRIME 2 | ||||
| #define BN_PRIMETEST_PROBABLY_PRIME               3 | ||||
|  | ||||
| int ossl_bn_miller_rabin_is_prime(const BIGNUM *w, int iterations, BN_CTX *ctx, | ||||
|                                   BN_GENCB *cb, int enhanced, int *status); | ||||
| int ossl_bn_check_generated_prime(const BIGNUM *w, int checks, BN_CTX *ctx, | ||||
|                                   BN_GENCB *cb); | ||||
|  | ||||
| const BIGNUM *ossl_bn_get0_small_factors(void); | ||||
|  | ||||
| int ossl_bn_rsa_fips186_4_gen_prob_primes(BIGNUM *p, BIGNUM *Xpout, | ||||
|                                           BIGNUM *p1, BIGNUM *p2, | ||||
|                                           const BIGNUM *Xp, const BIGNUM *Xp1, | ||||
|                                           const BIGNUM *Xp2, int nlen, | ||||
|                                           const BIGNUM *e, BN_CTX *ctx, | ||||
|                                           BN_GENCB *cb); | ||||
|  | ||||
| int ossl_bn_rsa_fips186_4_derive_prime(BIGNUM *Y, BIGNUM *X, const BIGNUM *Xin, | ||||
|                                        const BIGNUM *r1, const BIGNUM *r2, | ||||
|                                        int nlen, const BIGNUM *e, BN_CTX *ctx, | ||||
|                                        BN_GENCB *cb); | ||||
|  | ||||
| OSSL_LIB_CTX *ossl_bn_get_libctx(BN_CTX *ctx); | ||||
|  | ||||
| extern const BIGNUM ossl_bn_inv_sqrt_2; | ||||
|  | ||||
| #if defined(OPENSSL_SYS_LINUX) && !defined(FIPS_MODULE) && defined (__s390x__) | ||||
| # define S390X_MOD_EXP | ||||
| #endif | ||||
|  | ||||
| int s390x_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, | ||||
|                 const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); | ||||
| int s390x_crt(BIGNUM *r, const BIGNUM *i, const BIGNUM *p, const BIGNUM *q, | ||||
|             const BIGNUM *dmp, const BIGNUM *dmq, const BIGNUM *iqmp); | ||||
|  | ||||
| #endif | ||||
| @@ -1,29 +0,0 @@ | ||||
| /* WARNING: do not edit! */ | ||||
| /* Generated by Makefile from include/crypto/bn_conf.h.in */ | ||||
| /* | ||||
|  * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_BN_CONF_H | ||||
| # define OSSL_CRYPTO_BN_CONF_H | ||||
| # pragma once | ||||
|  | ||||
| /* | ||||
|  * The contents of this file are not used in the UEFI build, as | ||||
|  * both 32-bit and 64-bit builds are supported from a single run | ||||
|  * of the Configure script. | ||||
|  */ | ||||
|  | ||||
| /* Should we define BN_DIV2W here? */ | ||||
|  | ||||
| /* Only one for the following should be defined */ | ||||
| #define SIXTY_FOUR_BIT_LONG | ||||
| #undef SIXTY_FOUR_BIT | ||||
| #undef THIRTY_TWO_BIT | ||||
|  | ||||
| #endif | ||||
| @@ -1,28 +0,0 @@ | ||||
| {- join("\n",map { "/* $_ */" } @autowarntext) -} | ||||
| /* | ||||
|  * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_BN_CONF_H | ||||
| # define OSSL_CRYPTO_BN_CONF_H | ||||
| # pragma once | ||||
|  | ||||
| /* | ||||
|  * The contents of this file are not used in the UEFI build, as | ||||
|  * both 32-bit and 64-bit builds are supported from a single run | ||||
|  * of the Configure script. | ||||
|  */ | ||||
|  | ||||
| /* Should we define BN_DIV2W here? */ | ||||
|  | ||||
| /* Only one for the following should be defined */ | ||||
| {- $config{b64l} ? "#define" : "#undef" -} SIXTY_FOUR_BIT_LONG | ||||
| {- $config{b64}  ? "#define" : "#undef" -} SIXTY_FOUR_BIT | ||||
| {- $config{b32}  ? "#define" : "#undef" -} THIRTY_TWO_BIT | ||||
|  | ||||
| #endif | ||||
| @@ -1,43 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #define declare_dh_bn(x) \ | ||||
|     extern const BIGNUM ossl_bignum_dh##x##_p;              \ | ||||
|     extern const BIGNUM ossl_bignum_dh##x##_q;              \ | ||||
|     extern const BIGNUM ossl_bignum_dh##x##_g;              \ | ||||
|  | ||||
| declare_dh_bn(1024_160) | ||||
| declare_dh_bn(2048_224) | ||||
| declare_dh_bn(2048_256) | ||||
|  | ||||
| extern const BIGNUM ossl_bignum_const_2; | ||||
|  | ||||
| extern const BIGNUM ossl_bignum_ffdhe2048_p; | ||||
| extern const BIGNUM ossl_bignum_ffdhe3072_p; | ||||
| extern const BIGNUM ossl_bignum_ffdhe4096_p; | ||||
| extern const BIGNUM ossl_bignum_ffdhe6144_p; | ||||
| extern const BIGNUM ossl_bignum_ffdhe8192_p; | ||||
| extern const BIGNUM ossl_bignum_ffdhe2048_q; | ||||
| extern const BIGNUM ossl_bignum_ffdhe3072_q; | ||||
| extern const BIGNUM ossl_bignum_ffdhe4096_q; | ||||
| extern const BIGNUM ossl_bignum_ffdhe6144_q; | ||||
| extern const BIGNUM ossl_bignum_ffdhe8192_q; | ||||
|  | ||||
| extern const BIGNUM ossl_bignum_modp_1536_p; | ||||
| extern const BIGNUM ossl_bignum_modp_2048_p; | ||||
| extern const BIGNUM ossl_bignum_modp_3072_p; | ||||
| extern const BIGNUM ossl_bignum_modp_4096_p; | ||||
| extern const BIGNUM ossl_bignum_modp_6144_p; | ||||
| extern const BIGNUM ossl_bignum_modp_8192_p; | ||||
| extern const BIGNUM ossl_bignum_modp_1536_q; | ||||
| extern const BIGNUM ossl_bignum_modp_2048_q; | ||||
| extern const BIGNUM ossl_bignum_modp_3072_q; | ||||
| extern const BIGNUM ossl_bignum_modp_4096_q; | ||||
| extern const BIGNUM ossl_bignum_modp_6144_q; | ||||
| extern const BIGNUM ossl_bignum_modp_8192_q; | ||||
| @@ -1,32 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2014-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OPENSSL_NO_SRP | ||||
|  | ||||
| extern const BIGNUM ossl_bn_group_1024; | ||||
|  | ||||
| extern const BIGNUM ossl_bn_group_1536; | ||||
|  | ||||
| extern const BIGNUM ossl_bn_group_2048; | ||||
|  | ||||
| extern const BIGNUM ossl_bn_group_3072; | ||||
|  | ||||
| extern const BIGNUM ossl_bn_group_4096; | ||||
|  | ||||
| extern const BIGNUM ossl_bn_group_6144; | ||||
|  | ||||
| extern const BIGNUM ossl_bn_group_8192; | ||||
|  | ||||
| extern const BIGNUM ossl_bn_generator_19; | ||||
|  | ||||
| extern const BIGNUM ossl_bn_generator_5; | ||||
|  | ||||
| extern const BIGNUM ossl_bn_generator_2; | ||||
|  | ||||
| #endif | ||||
| @@ -1,27 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_BNERR_H | ||||
| # define OSSL_CRYPTO_BNERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| int ossl_err_load_BN_strings(void); | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,27 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_BUFFERERR_H | ||||
| # define OSSL_CRYPTO_BUFFERERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| int ossl_err_load_BUF_strings(void); | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,43 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_CHACHA_H | ||||
| #define OSSL_CRYPTO_CHACHA_H | ||||
| # pragma once | ||||
|  | ||||
| #include <stddef.h> | ||||
|  | ||||
| /* | ||||
|  * ChaCha20_ctr32 encrypts |len| bytes from |inp| with the given key and | ||||
|  * nonce and writes the result to |out|, which may be equal to |inp|. | ||||
|  * The |key| is not 32 bytes of verbatim key material though, but the | ||||
|  * said material collected into 8 32-bit elements array in host byte | ||||
|  * order. Same approach applies to nonce: the |counter| argument is | ||||
|  * pointer to concatenated nonce and counter values collected into 4 | ||||
|  * 32-bit elements. This, passing crypto material collected into 32-bit | ||||
|  * elements as opposite to passing verbatim byte vectors, is chosen for | ||||
|  * efficiency in multi-call scenarios. | ||||
|  */ | ||||
| void ChaCha20_ctr32(unsigned char *out, const unsigned char *inp, | ||||
|                     size_t len, const unsigned int key[8], | ||||
|                     const unsigned int counter[4]); | ||||
| /* | ||||
|  * You can notice that there is no key setup procedure. Because it's | ||||
|  * as trivial as collecting bytes into 32-bit elements, it's reckoned | ||||
|  * that below macro is sufficient. | ||||
|  */ | ||||
| #define CHACHA_U8TOU32(p)  ( \ | ||||
|                 ((unsigned int)(p)[0])     | ((unsigned int)(p)[1]<<8) | \ | ||||
|                 ((unsigned int)(p)[2]<<16) | ((unsigned int)(p)[3]<<24)  ) | ||||
|  | ||||
| #define CHACHA_KEY_SIZE         32 | ||||
| #define CHACHA_CTR_SIZE         16 | ||||
| #define CHACHA_BLK_SIZE         64 | ||||
|  | ||||
| #endif | ||||
| @@ -1,51 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CMLL_PLATFORM_H | ||||
| # define OSSL_CMLL_PLATFORM_H | ||||
| # pragma once | ||||
|  | ||||
| # if defined(CMLL_ASM) && (defined(__sparc) || defined(__sparc__)) | ||||
|  | ||||
| /* Fujitsu SPARC64 X support */ | ||||
| #  include "crypto/sparc_arch.h" | ||||
|  | ||||
| #  ifndef OPENSSL_NO_CAMELLIA | ||||
| #   define SPARC_CMLL_CAPABLE      (OPENSSL_sparcv9cap_P[1] & CFR_CAMELLIA) | ||||
| #   include <openssl/camellia.h> | ||||
|  | ||||
| void cmll_t4_set_key(const unsigned char *key, int bits, CAMELLIA_KEY *ks); | ||||
| void cmll_t4_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                      const CAMELLIA_KEY *key); | ||||
| void cmll_t4_decrypt(const unsigned char *in, unsigned char *out, | ||||
|                      const CAMELLIA_KEY *key); | ||||
|  | ||||
| void cmll128_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                             size_t len, const CAMELLIA_KEY *key, | ||||
|                             unsigned char *ivec, int /*unused*/); | ||||
| void cmll128_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, | ||||
|                             size_t len, const CAMELLIA_KEY *key, | ||||
|                             unsigned char *ivec, int /*unused*/); | ||||
| void cmll256_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                             size_t len, const CAMELLIA_KEY *key, | ||||
|                             unsigned char *ivec, int /*unused*/); | ||||
| void cmll256_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, | ||||
|                             size_t len, const CAMELLIA_KEY *key, | ||||
|                             unsigned char *ivec, int /*unused*/); | ||||
| void cmll128_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                               size_t blocks, const CAMELLIA_KEY *key, | ||||
|                               unsigned char *ivec); | ||||
| void cmll256_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                               size_t blocks, const CAMELLIA_KEY *key, | ||||
|                               unsigned char *ivec); | ||||
| #  endif /* OPENSSL_NO_CAMELLIA */ | ||||
|  | ||||
| # endif /* CMLL_ASM && sparc */ | ||||
|  | ||||
| #endif /* OSSL_CRYPTO_CIPHERMODE_PLATFORM_H */ | ||||
| @@ -1,30 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_CMPERR_H | ||||
| # define OSSL_CRYPTO_CMPERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| # ifndef OPENSSL_NO_CMP | ||||
|  | ||||
| int ossl_err_load_CMP_strings(void); | ||||
| # endif | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,30 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_CMSERR_H | ||||
| # define OSSL_CRYPTO_CMSERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| # ifndef OPENSSL_NO_CMS | ||||
|  | ||||
| int ossl_err_load_CMS_strings(void); | ||||
| # endif | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,30 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_COMPERR_H | ||||
| # define OSSL_CRYPTO_COMPERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| # ifndef OPENSSL_NO_COMP | ||||
|  | ||||
| int ossl_err_load_COMP_strings(void); | ||||
| # endif | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,27 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_CONFERR_H | ||||
| # define OSSL_CRYPTO_CONFERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| int ossl_err_load_CONF_strings(void); | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,48 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2022-2023 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #include <openssl/core.h> | ||||
|  | ||||
| void *ossl_provider_store_new(OSSL_LIB_CTX *); | ||||
| void *ossl_property_string_data_new(OSSL_LIB_CTX *); | ||||
| void *ossl_stored_namemap_new(OSSL_LIB_CTX *); | ||||
| void *ossl_property_defns_new(OSSL_LIB_CTX *); | ||||
| void *ossl_ctx_global_properties_new(OSSL_LIB_CTX *); | ||||
| void *ossl_rand_ctx_new(OSSL_LIB_CTX *); | ||||
| void *ossl_prov_conf_ctx_new(OSSL_LIB_CTX *); | ||||
| void *ossl_bio_core_globals_new(OSSL_LIB_CTX *); | ||||
| void *ossl_child_prov_ctx_new(OSSL_LIB_CTX *); | ||||
| void *ossl_prov_drbg_nonce_ctx_new(OSSL_LIB_CTX *); | ||||
| void *ossl_self_test_set_callback_new(OSSL_LIB_CTX *); | ||||
| void *ossl_rand_crng_ctx_new(OSSL_LIB_CTX *); | ||||
| int ossl_thread_register_fips(OSSL_LIB_CTX *); | ||||
| void *ossl_thread_event_ctx_new(OSSL_LIB_CTX *); | ||||
| void *ossl_fips_prov_ossl_ctx_new(OSSL_LIB_CTX *); | ||||
| #if defined(OPENSSL_THREADS) | ||||
| void *ossl_threads_ctx_new(OSSL_LIB_CTX *); | ||||
| #endif | ||||
|  | ||||
| void ossl_provider_store_free(void *); | ||||
| void ossl_property_string_data_free(void *); | ||||
| void ossl_stored_namemap_free(void *); | ||||
| void ossl_property_defns_free(void *); | ||||
| void ossl_ctx_global_properties_free(void *); | ||||
| void ossl_rand_ctx_free(void *); | ||||
| void ossl_prov_conf_ctx_free(void *); | ||||
| void ossl_bio_core_globals_free(void *); | ||||
| void ossl_child_prov_ctx_free(void *); | ||||
| void ossl_prov_drbg_nonce_ctx_free(void *); | ||||
| void ossl_self_test_set_callback_free(void *); | ||||
| void ossl_rand_crng_ctx_free(void *); | ||||
| void ossl_thread_event_ctx_free(void *); | ||||
| void ossl_fips_prov_ossl_ctx_free(void *); | ||||
| void ossl_release_default_drbg_ctx(void); | ||||
| #if defined(OPENSSL_THREADS) | ||||
| void ossl_threads_ctx_free(void *); | ||||
| #endif | ||||
| @@ -1,30 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_CRMFERR_H | ||||
| # define OSSL_CRYPTO_CRMFERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| # ifndef OPENSSL_NO_CRMF | ||||
|  | ||||
| int ossl_err_load_CRMF_strings(void); | ||||
| # endif | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,39 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_CRYPTLIB_H | ||||
| # define OSSL_CRYPTO_CRYPTLIB_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/core.h> | ||||
| # include "internal/cryptlib.h" | ||||
|  | ||||
| /* This file is not scanned by mkdef.pl, whereas cryptlib.h is */ | ||||
|  | ||||
| int ossl_init_thread_start(const void *index, void *arg, | ||||
|                            OSSL_thread_stop_handler_fn handfn); | ||||
| int ossl_init_thread_deregister(void *index); | ||||
| int ossl_init_thread(void); | ||||
| void ossl_cleanup_thread(void); | ||||
| void ossl_ctx_thread_stop(OSSL_LIB_CTX *ctx); | ||||
|  | ||||
| /* | ||||
|  * OPENSSL_INIT flags. The primary list of these is in crypto.h. Flags below | ||||
|  * are those omitted from crypto.h because they are "reserved for internal | ||||
|  * use". | ||||
|  */ | ||||
| # define OPENSSL_INIT_BASE_ONLY              0x00040000L | ||||
|  | ||||
| void ossl_trace_cleanup(void); | ||||
| void ossl_malloc_setup_failures(void); | ||||
|  | ||||
| int ossl_crypto_alloc_ex_data_intern(int class_index, void *obj, | ||||
|                                      CRYPTO_EX_DATA *ad, int idx); | ||||
|  | ||||
| #endif  /* OSSL_CRYPTO_CRYPTLIB_H */ | ||||
| @@ -1,27 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_CRYPTOERR_H | ||||
| # define OSSL_CRYPTO_CRYPTOERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| int ossl_err_load_CRYPTO_strings(void); | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,30 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_CTERR_H | ||||
| # define OSSL_CRYPTO_CTERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| # ifndef OPENSSL_NO_CT | ||||
|  | ||||
| int ossl_err_load_CT_strings(void); | ||||
| # endif | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,86 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2017-2022 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  * This version of ctype.h provides a standardised and platform | ||||
|  * independent implementation that supports seven bit ASCII characters. | ||||
|  * The specific intent is to not pass extended ASCII characters (> 127) | ||||
|  * even if the host operating system would. | ||||
|  * | ||||
|  * There is EBCDIC support included for machines which use this.  However, | ||||
|  * there are a number of concerns about how well EBCDIC is supported | ||||
|  * throughout the rest of the source code.  Refer to issue #4154 for | ||||
|  * details. | ||||
|  */ | ||||
| #ifndef OSSL_CRYPTO_CTYPE_H | ||||
| # define OSSL_CRYPTO_CTYPE_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/e_os2.h> | ||||
|  | ||||
| # define CTYPE_MASK_lower       0x1 | ||||
| # define CTYPE_MASK_upper       0x2 | ||||
| # define CTYPE_MASK_digit       0x4 | ||||
| # define CTYPE_MASK_space       0x8 | ||||
| # define CTYPE_MASK_xdigit      0x10 | ||||
| # define CTYPE_MASK_blank       0x20 | ||||
| # define CTYPE_MASK_cntrl       0x40 | ||||
| # define CTYPE_MASK_graph       0x80 | ||||
| # define CTYPE_MASK_print       0x100 | ||||
| # define CTYPE_MASK_punct       0x200 | ||||
| # define CTYPE_MASK_base64      0x400 | ||||
| # define CTYPE_MASK_asn1print   0x800 | ||||
|  | ||||
| # define CTYPE_MASK_alpha   (CTYPE_MASK_lower | CTYPE_MASK_upper) | ||||
| # define CTYPE_MASK_alnum   (CTYPE_MASK_alpha | CTYPE_MASK_digit) | ||||
|  | ||||
| /* | ||||
|  * The ascii mask assumes that any other classification implies that | ||||
|  * the character is ASCII and that there are no ASCII characters | ||||
|  * that aren't in any of the classifications. | ||||
|  * | ||||
|  * This assumption holds at the moment, but it might not in the future. | ||||
|  */ | ||||
| # define CTYPE_MASK_ascii   (~0) | ||||
|  | ||||
| # ifdef CHARSET_EBCDIC | ||||
| int ossl_toascii(int c); | ||||
| int ossl_fromascii(int c); | ||||
| # else | ||||
| #  define ossl_toascii(c)       (c) | ||||
| #  define ossl_fromascii(c)     (c) | ||||
| # endif | ||||
| int ossl_ctype_check(int c, unsigned int mask); | ||||
|  | ||||
| int ossl_tolower(int c); | ||||
| int ossl_toupper(int c); | ||||
|  | ||||
| int ossl_isdigit(int c); | ||||
| int ossl_islower(int c); | ||||
| int ossl_isupper(int c); | ||||
|  | ||||
| int ossl_ascii_isdigit(int c); | ||||
|  | ||||
| # define ossl_isalnum(c)        (ossl_ctype_check((c), CTYPE_MASK_alnum)) | ||||
| # define ossl_isalpha(c)        (ossl_ctype_check((c), CTYPE_MASK_alpha)) | ||||
| # ifdef CHARSET_EBCDIC | ||||
| # define ossl_isascii(c)        (ossl_ctype_check((c), CTYPE_MASK_ascii)) | ||||
| # else | ||||
| # define ossl_isascii(c)        (((c) & ~127) == 0) | ||||
| # endif | ||||
| # define ossl_isblank(c)        (ossl_ctype_check((c), CTYPE_MASK_blank)) | ||||
| # define ossl_iscntrl(c)        (ossl_ctype_check((c), CTYPE_MASK_cntrl)) | ||||
| # define ossl_isgraph(c)        (ossl_ctype_check((c), CTYPE_MASK_graph)) | ||||
| # define ossl_isprint(c)        (ossl_ctype_check((c), CTYPE_MASK_print)) | ||||
| # define ossl_ispunct(c)        (ossl_ctype_check((c), CTYPE_MASK_punct)) | ||||
| # define ossl_isspace(c)        (ossl_ctype_check((c), CTYPE_MASK_space)) | ||||
| # define ossl_isxdigit(c)       (ossl_ctype_check((c), CTYPE_MASK_xdigit)) | ||||
| # define ossl_isbase64(c)       (ossl_ctype_check((c), CTYPE_MASK_base64)) | ||||
| # define ossl_isasn1print(c)    (ossl_ctype_check((c), CTYPE_MASK_asn1print)) | ||||
| #endif | ||||
| @@ -1,40 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_DECODER_H | ||||
| # define OSSL_CRYPTO_DECODER_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/decoder.h> | ||||
|  | ||||
| /* | ||||
|  * These are specially made for the 'file:' provider-native loader, which | ||||
|  * uses this to install a DER to anything decoder, which doesn't do much | ||||
|  * except read a DER blob and pass it on as a provider object abstraction | ||||
|  * (provider-object(7)). | ||||
|  */ | ||||
| void *ossl_decoder_from_algorithm(int id, const OSSL_ALGORITHM *algodef, | ||||
|                                   OSSL_PROVIDER *prov); | ||||
|  | ||||
| OSSL_DECODER_INSTANCE * | ||||
| ossl_decoder_instance_new(OSSL_DECODER *decoder, void *decoderctx); | ||||
| void ossl_decoder_instance_free(OSSL_DECODER_INSTANCE *decoder_inst); | ||||
| OSSL_DECODER_INSTANCE *ossl_decoder_instance_dup(const OSSL_DECODER_INSTANCE *src); | ||||
| int ossl_decoder_ctx_add_decoder_inst(OSSL_DECODER_CTX *ctx, | ||||
|                                       OSSL_DECODER_INSTANCE *di); | ||||
|  | ||||
| int ossl_decoder_get_number(const OSSL_DECODER *encoder); | ||||
| int ossl_decoder_store_cache_flush(OSSL_LIB_CTX *libctx); | ||||
| int ossl_decoder_store_remove_all_provided(const OSSL_PROVIDER *prov); | ||||
|  | ||||
| void *ossl_decoder_cache_new(OSSL_LIB_CTX *ctx); | ||||
| void ossl_decoder_cache_free(void *vcache); | ||||
| int ossl_decoder_cache_flush(OSSL_LIB_CTX *libctx); | ||||
|  | ||||
| #endif | ||||
| @@ -1,27 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_DECODERERR_H | ||||
| # define OSSL_CRYPTO_DECODERERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| int ossl_err_load_OSSL_DECODER_strings(void); | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,35 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_DES_PLATFORM_H | ||||
| # define OSSL_DES_PLATFORM_H | ||||
| # pragma once | ||||
|  | ||||
| # if defined(DES_ASM) && (defined(__sparc) || defined(__sparc__)) | ||||
|  | ||||
| /* Fujitsu SPARC64 X support */ | ||||
| #  include "crypto/sparc_arch.h" | ||||
|  | ||||
| #  ifndef OPENSSL_NO_DES | ||||
| #   define SPARC_DES_CAPABLE      (OPENSSL_sparcv9cap_P[1] & CFR_DES) | ||||
| #   include <openssl/des.h> | ||||
| void des_t4_key_expand(const void *key, DES_key_schedule *ks); | ||||
| void des_t4_ede3_cbc_encrypt(const void *inp, void *out, size_t len, | ||||
|                              const DES_key_schedule ks[3], unsigned char iv[8]); | ||||
| void des_t4_ede3_cbc_decrypt(const void *inp, void *out, size_t len, | ||||
|                              const DES_key_schedule ks[3], unsigned char iv[8]); | ||||
| void des_t4_cbc_encrypt(const void *inp, void *out, size_t len, | ||||
|                         const DES_key_schedule *ks, unsigned char iv[8]); | ||||
| void des_t4_cbc_decrypt(const void *inp, void *out, size_t len, | ||||
|                         const DES_key_schedule *ks, unsigned char iv[8]); | ||||
| #  endif /* OPENSSL_NO_DES */ | ||||
|  | ||||
| # endif /* DES_ASM && sparc */ | ||||
|  | ||||
| #endif /* OSSL_CRYPTO_CIPHERMODE_PLATFORM_H */ | ||||
| @@ -1,62 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_DH_H | ||||
| # define OSSL_CRYPTO_DH_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/core.h> | ||||
| # include <openssl/params.h> | ||||
| # include <openssl/dh.h> | ||||
| # include "internal/ffc.h" | ||||
|  | ||||
| DH *ossl_dh_new_by_nid_ex(OSSL_LIB_CTX *libctx, int nid); | ||||
| DH *ossl_dh_new_ex(OSSL_LIB_CTX *libctx); | ||||
| void ossl_dh_set0_libctx(DH *d, OSSL_LIB_CTX *libctx); | ||||
| int ossl_dh_generate_ffc_parameters(DH *dh, int type, int pbits, int qbits, | ||||
|                                     BN_GENCB *cb); | ||||
| int ossl_dh_generate_public_key(BN_CTX *ctx, const DH *dh, | ||||
|                                 const BIGNUM *priv_key, BIGNUM *pub_key); | ||||
| int ossl_dh_get_named_group_uid_from_size(int pbits); | ||||
| const char *ossl_dh_gen_type_id2name(int id); | ||||
| int ossl_dh_gen_type_name2id(const char *name, int type); | ||||
| void ossl_dh_cache_named_group(DH *dh); | ||||
| int ossl_dh_is_named_safe_prime_group(const DH *dh); | ||||
|  | ||||
| FFC_PARAMS *ossl_dh_get0_params(DH *dh); | ||||
| int ossl_dh_get0_nid(const DH *dh); | ||||
| int ossl_dh_params_fromdata(DH *dh, const OSSL_PARAM params[]); | ||||
| int ossl_dh_key_fromdata(DH *dh, const OSSL_PARAM params[], int include_private); | ||||
| int ossl_dh_params_todata(DH *dh, OSSL_PARAM_BLD *bld, OSSL_PARAM params[]); | ||||
| int ossl_dh_key_todata(DH *dh, OSSL_PARAM_BLD *bld, OSSL_PARAM params[], | ||||
|                        int include_private); | ||||
| DH *ossl_dh_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, | ||||
|                            OSSL_LIB_CTX *libctx, const char *propq); | ||||
| int ossl_dh_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh); | ||||
|  | ||||
| int ossl_dh_check_pub_key_partial(const DH *dh, const BIGNUM *pub_key, int *ret); | ||||
| int ossl_dh_check_priv_key(const DH *dh, const BIGNUM *priv_key, int *ret); | ||||
| int ossl_dh_check_pairwise(const DH *dh); | ||||
|  | ||||
| const DH_METHOD *ossl_dh_get_method(const DH *dh); | ||||
|  | ||||
| int ossl_dh_buf2key(DH *key, const unsigned char *buf, size_t len); | ||||
| size_t ossl_dh_key2buf(const DH *dh, unsigned char **pbuf, size_t size, | ||||
|                        int alloc); | ||||
|  | ||||
| int ossl_dh_kdf_X9_42_asn1(unsigned char *out, size_t outlen, | ||||
|                            const unsigned char *Z, size_t Zlen, | ||||
|                            const char *cek_alg, | ||||
|                            const unsigned char *ukm, size_t ukmlen, | ||||
|                            const EVP_MD *md, | ||||
|                            OSSL_LIB_CTX *libctx, const char *propq); | ||||
| int ossl_dh_is_foreign(const DH *dh); | ||||
| DH *ossl_dh_dup(const DH *dh, int selection); | ||||
|  | ||||
| #endif  /* OSSL_CRYPTO_DH_H */ | ||||
| @@ -1,30 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_DHERR_H | ||||
| # define OSSL_CRYPTO_DHERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| # ifndef OPENSSL_NO_DH | ||||
|  | ||||
| int ossl_err_load_DH_strings(void); | ||||
| # endif | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,51 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_DSA_H | ||||
| # define OSSL_CRYPTO_DSA_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/core.h> | ||||
| # include <openssl/dsa.h> | ||||
| # include "internal/ffc.h" | ||||
|  | ||||
| #define DSA_PARAMGEN_TYPE_FIPS_186_4   0   /* Use FIPS186-4 standard */ | ||||
| #define DSA_PARAMGEN_TYPE_FIPS_186_2   1   /* Use legacy FIPS186-2 standard */ | ||||
| #define DSA_PARAMGEN_TYPE_FIPS_DEFAULT 2 | ||||
|  | ||||
| DSA *ossl_dsa_new(OSSL_LIB_CTX *libctx); | ||||
| void ossl_dsa_set0_libctx(DSA *d, OSSL_LIB_CTX *libctx); | ||||
|  | ||||
| int ossl_dsa_generate_ffc_parameters(DSA *dsa, int type, int pbits, int qbits, | ||||
|                                      BN_GENCB *cb); | ||||
|  | ||||
| int ossl_dsa_sign_int(int type, const unsigned char *dgst, int dlen, | ||||
|                       unsigned char *sig, unsigned int *siglen, DSA *dsa, | ||||
|                       unsigned int nonce_type, const char *digestname, | ||||
|                       OSSL_LIB_CTX *libctx, const char *propq); | ||||
|  | ||||
| FFC_PARAMS *ossl_dsa_get0_params(DSA *dsa); | ||||
| int ossl_dsa_ffc_params_fromdata(DSA *dsa, const OSSL_PARAM params[]); | ||||
| int ossl_dsa_key_fromdata(DSA *dsa, const OSSL_PARAM params[], | ||||
|                           int include_private); | ||||
| DSA *ossl_dsa_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, | ||||
|                              OSSL_LIB_CTX *libctx, const char *propq); | ||||
|  | ||||
| int ossl_dsa_generate_public_key(BN_CTX *ctx, const DSA *dsa, | ||||
|                                  const BIGNUM *priv_key, BIGNUM *pub_key); | ||||
| int ossl_dsa_check_params(const DSA *dsa, int checktype, int *ret); | ||||
| int ossl_dsa_check_pub_key(const DSA *dsa, const BIGNUM *pub_key, int *ret); | ||||
| int ossl_dsa_check_pub_key_partial(const DSA *dsa, const BIGNUM *pub_key, | ||||
|                                    int *ret); | ||||
| int ossl_dsa_check_priv_key(const DSA *dsa, const BIGNUM *priv_key, int *ret); | ||||
| int ossl_dsa_check_pairwise(const DSA *dsa); | ||||
| int ossl_dsa_is_foreign(const DSA *dsa); | ||||
| DSA *ossl_dsa_dup(const DSA *dsa, int selection); | ||||
|  | ||||
| #endif | ||||
| @@ -1,30 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_DSAERR_H | ||||
| # define OSSL_CRYPTO_DSAERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| # ifndef OPENSSL_NO_DSA | ||||
|  | ||||
| int ossl_err_load_DSA_strings(void); | ||||
| # endif | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,18 +0,0 @@ | ||||
| /* WARNING: do not edit! */ | ||||
| /* Generated by Makefile from include/crypto/dso_conf.h.in */ | ||||
| /* | ||||
|  * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_DSO_CONF_H | ||||
| # define OSSL_CRYPTO_DSO_CONF_H | ||||
| # pragma once | ||||
|  | ||||
| # define DSO_NONE | ||||
| # define DSO_EXTENSION ".so" | ||||
| #endif | ||||
| @@ -1,33 +0,0 @@ | ||||
| {- join("\n",map { "/* $_ */" } @autowarntext) -} | ||||
| /* | ||||
|  * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_DSO_CONF_H | ||||
| # define OSSL_CRYPTO_DSO_CONF_H | ||||
| # pragma once | ||||
|  | ||||
| {-  # The DSO code currently always implements all functions so that no | ||||
|     # applications will have to worry about that from a compilation point | ||||
|     # of view. However, the "method"s may return zero unless that platform | ||||
|     # has support compiled in for them. Currently each method is enabled | ||||
|     # by a define "DSO_<name>" ... we translate the "dso_scheme" config | ||||
|     # string entry into using the following logic; | ||||
|     my $scheme = $disabled{dso} ? undef : uc $target{dso_scheme}; | ||||
|     if (!$scheme) { | ||||
|         $scheme = "NONE"; | ||||
|     } | ||||
|     my @macros = ( "DSO_$scheme" ); | ||||
|     if ($scheme eq 'DLFCN') { | ||||
|         @macros = ( "DSO_DLFCN", "HAVE_DLFCN_H" ); | ||||
|     } elsif ($scheme eq "DLFCN_NO_H") { | ||||
|         @macros = ( "DSO_DLFCN" ); | ||||
|     } | ||||
|     join("\n", map { "# define $_" } @macros); -} | ||||
| # define DSO_EXTENSION "{- platform->dsoext() -}" | ||||
| #endif | ||||
| @@ -1,106 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| /* Internal EC functions for other submodules: not for application use */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_EC_H | ||||
| # define OSSL_CRYPTO_EC_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/evp.h> | ||||
|  | ||||
| int ossl_ec_curve_name2nid(const char *name); | ||||
| const char *ossl_ec_curve_nid2nist_int(int nid); | ||||
| int ossl_ec_curve_nist2nid_int(const char *name); | ||||
| int evp_pkey_ctx_set_ec_param_enc_prov(EVP_PKEY_CTX *ctx, int param_enc); | ||||
|  | ||||
| # ifndef OPENSSL_NO_EC | ||||
| #  include <openssl/core.h> | ||||
| #  include <openssl/ec.h> | ||||
| #  include "crypto/types.h" | ||||
|  | ||||
| /*- | ||||
|  * Computes the multiplicative inverse of x in the range | ||||
|  * [1,EC_GROUP::order), where EC_GROUP::order is the cardinality of the | ||||
|  * subgroup generated by the generator G: | ||||
|  * | ||||
|  *         res := x^(-1) (mod EC_GROUP::order). | ||||
|  * | ||||
|  * This function expects the following two conditions to hold: | ||||
|  *  - the EC_GROUP order is prime, and | ||||
|  *  - x is included in the range [1, EC_GROUP::order). | ||||
|  * | ||||
|  * This function returns 1 on success, 0 on error. | ||||
|  * | ||||
|  * If the EC_GROUP order is even, this function explicitly returns 0 as | ||||
|  * an error. | ||||
|  * In case any of the two conditions stated above is not satisfied, | ||||
|  * the correctness of its output is not guaranteed, even if the return | ||||
|  * value could still be 1 (as primality testing and a conditional modular | ||||
|  * reduction round on the input can be omitted by the underlying | ||||
|  * implementations for better SCA properties on regular input values). | ||||
|  */ | ||||
| __owur int ossl_ec_group_do_inverse_ord(const EC_GROUP *group, BIGNUM *res, | ||||
|                                         const BIGNUM *x, BN_CTX *ctx); | ||||
|  | ||||
| /*- | ||||
|  * ECDH Key Derivation Function as defined in ANSI X9.63 | ||||
|  */ | ||||
| int ossl_ecdh_kdf_X9_63(unsigned char *out, size_t outlen, | ||||
|                         const unsigned char *Z, size_t Zlen, | ||||
|                         const unsigned char *sinfo, size_t sinfolen, | ||||
|                         const EVP_MD *md, OSSL_LIB_CTX *libctx, | ||||
|                         const char *propq); | ||||
|  | ||||
| int ossl_ec_key_public_check(const EC_KEY *eckey, BN_CTX *ctx); | ||||
| int ossl_ec_key_public_check_quick(const EC_KEY *eckey, BN_CTX *ctx); | ||||
| int ossl_ec_key_private_check(const EC_KEY *eckey); | ||||
| int ossl_ec_key_pairwise_check(const EC_KEY *eckey, BN_CTX *ctx); | ||||
| OSSL_LIB_CTX *ossl_ec_key_get_libctx(const EC_KEY *eckey); | ||||
| const char *ossl_ec_key_get0_propq(const EC_KEY *eckey); | ||||
| void ossl_ec_key_set0_libctx(EC_KEY *key, OSSL_LIB_CTX *libctx); | ||||
|  | ||||
| /* Backend support */ | ||||
| int ossl_ec_group_todata(const EC_GROUP *group, OSSL_PARAM_BLD *tmpl, | ||||
|                          OSSL_PARAM params[], OSSL_LIB_CTX *libctx, | ||||
|                          const char *propq, | ||||
|                          BN_CTX *bnctx, unsigned char **genbuf); | ||||
| int ossl_ec_group_fromdata(EC_KEY *ec, const OSSL_PARAM params[]); | ||||
| int ossl_ec_group_set_params(EC_GROUP *group, const OSSL_PARAM params[]); | ||||
| int ossl_ec_key_fromdata(EC_KEY *ecx, const OSSL_PARAM params[], | ||||
|                          int include_private); | ||||
| int ossl_ec_key_otherparams_fromdata(EC_KEY *ec, const OSSL_PARAM params[]); | ||||
| int ossl_ec_key_is_foreign(const EC_KEY *ec); | ||||
| EC_KEY *ossl_ec_key_dup(const EC_KEY *key, int selection); | ||||
| int ossl_x509_algor_is_sm2(const X509_ALGOR *palg); | ||||
| EC_KEY *ossl_ec_key_param_from_x509_algor(const X509_ALGOR *palg, | ||||
|                                           OSSL_LIB_CTX *libctx, | ||||
|                                           const char *propq); | ||||
| EC_KEY *ossl_ec_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, | ||||
|                                OSSL_LIB_CTX *libctx, const char *propq); | ||||
|  | ||||
| int ossl_ec_set_ecdh_cofactor_mode(EC_KEY *ec, int mode); | ||||
| int ossl_ec_encoding_name2id(const char *name); | ||||
| int ossl_ec_encoding_param2id(const OSSL_PARAM *p, int *id); | ||||
| int ossl_ec_pt_format_name2id(const char *name); | ||||
| int ossl_ec_pt_format_param2id(const OSSL_PARAM *p, int *id); | ||||
| char *ossl_ec_pt_format_id2name(int id); | ||||
|  | ||||
| char *ossl_ec_check_group_type_id2name(int flags); | ||||
| int ossl_ec_set_check_group_type_from_name(EC_KEY *ec, const char *name); | ||||
| int ossl_ec_generate_key_dhkem(EC_KEY *eckey, | ||||
|                                const unsigned char *ikm, size_t ikmlen); | ||||
| int ossl_ecdsa_deterministic_sign(const unsigned char *dgst, int dlen, | ||||
|                                   unsigned char *sig, unsigned int *siglen, | ||||
|                                   EC_KEY *eckey, unsigned int nonce_type, | ||||
|                                   const char *digestname, | ||||
|                                   OSSL_LIB_CTX *libctx, const char *propq); | ||||
| # endif /* OPENSSL_NO_EC */ | ||||
| #endif | ||||
| @@ -1,30 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_ECERR_H | ||||
| # define OSSL_CRYPTO_ECERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| # ifndef OPENSSL_NO_EC | ||||
|  | ||||
| int ossl_err_load_EC_strings(void); | ||||
| # endif | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,158 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| /* Internal EC functions for other submodules: not for application use */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_ECX_H | ||||
| # define OSSL_CRYPTO_ECX_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
|  | ||||
| # ifndef OPENSSL_NO_ECX | ||||
|  | ||||
| #  include <openssl/core.h> | ||||
| #  include <openssl/e_os2.h> | ||||
| #  include <openssl/crypto.h> | ||||
| #  include "internal/refcount.h" | ||||
| #  include "crypto/types.h" | ||||
|  | ||||
| #  define X25519_KEYLEN         32 | ||||
| #  define X448_KEYLEN           56 | ||||
| #  define ED25519_KEYLEN        32 | ||||
| #  define ED448_KEYLEN          57 | ||||
|  | ||||
| #  define MAX_KEYLEN  ED448_KEYLEN | ||||
|  | ||||
| #  define X25519_BITS           253 | ||||
| #  define X25519_SECURITY_BITS  128 | ||||
|  | ||||
| #  define X448_BITS             448 | ||||
| #  define X448_SECURITY_BITS    224 | ||||
|  | ||||
| #  define ED25519_BITS          256 | ||||
| /* RFC8032 Section 8.5 */ | ||||
| #  define ED25519_SECURITY_BITS 128 | ||||
| #  define ED25519_SIGSIZE       64 | ||||
|  | ||||
| #  define ED448_BITS            456 | ||||
| /* RFC8032 Section 8.5 */ | ||||
| #  define ED448_SECURITY_BITS   224 | ||||
| #  define ED448_SIGSIZE         114 | ||||
|  | ||||
|  | ||||
| typedef enum { | ||||
|     ECX_KEY_TYPE_X25519, | ||||
|     ECX_KEY_TYPE_X448, | ||||
|     ECX_KEY_TYPE_ED25519, | ||||
|     ECX_KEY_TYPE_ED448 | ||||
| } ECX_KEY_TYPE; | ||||
|  | ||||
| #define KEYTYPE2NID(type) \ | ||||
|     ((type) == ECX_KEY_TYPE_X25519 \ | ||||
|      ?  EVP_PKEY_X25519 \ | ||||
|      : ((type) == ECX_KEY_TYPE_X448 \ | ||||
|         ? EVP_PKEY_X448 \ | ||||
|         : ((type) == ECX_KEY_TYPE_ED25519 \ | ||||
|            ? EVP_PKEY_ED25519 \ | ||||
|            : EVP_PKEY_ED448))) | ||||
|  | ||||
| struct ecx_key_st { | ||||
|     OSSL_LIB_CTX *libctx; | ||||
|     char *propq; | ||||
|     unsigned int haspubkey:1; | ||||
|     unsigned char pubkey[MAX_KEYLEN]; | ||||
|     unsigned char *privkey; | ||||
|     size_t keylen; | ||||
|     ECX_KEY_TYPE type; | ||||
|     CRYPTO_REF_COUNT references; | ||||
| }; | ||||
|  | ||||
| size_t ossl_ecx_key_length(ECX_KEY_TYPE type); | ||||
| ECX_KEY *ossl_ecx_key_new(OSSL_LIB_CTX *libctx, ECX_KEY_TYPE type, | ||||
|                           int haspubkey, const char *propq); | ||||
| void ossl_ecx_key_set0_libctx(ECX_KEY *key, OSSL_LIB_CTX *libctx); | ||||
| unsigned char *ossl_ecx_key_allocate_privkey(ECX_KEY *key); | ||||
| void ossl_ecx_key_free(ECX_KEY *key); | ||||
| int ossl_ecx_key_up_ref(ECX_KEY *key); | ||||
| ECX_KEY *ossl_ecx_key_dup(const ECX_KEY *key, int selection); | ||||
| int ossl_ecx_compute_key(ECX_KEY *peer, ECX_KEY *priv, size_t keylen, | ||||
|                          unsigned char *secret, size_t *secretlen, | ||||
|                          size_t outlen); | ||||
|  | ||||
| int ossl_x25519(uint8_t out_shared_key[32], const uint8_t private_key[32], | ||||
|                 const uint8_t peer_public_value[32]); | ||||
| void ossl_x25519_public_from_private(uint8_t out_public_value[32], | ||||
|                                      const uint8_t private_key[32]); | ||||
|  | ||||
| int | ||||
| ossl_ed25519_public_from_private(OSSL_LIB_CTX *ctx, uint8_t out_public_key[32], | ||||
|                                  const uint8_t private_key[32], | ||||
|                                  const char *propq); | ||||
| int | ||||
| ossl_ed25519_sign(uint8_t *out_sig, const uint8_t *tbs, size_t tbs_len, | ||||
|                   const uint8_t public_key[32], const uint8_t private_key[32], | ||||
|                   const uint8_t dom2flag, const uint8_t phflag, const uint8_t csflag, | ||||
|                   const uint8_t *context, size_t context_len, | ||||
|                   OSSL_LIB_CTX *libctx, const char *propq); | ||||
| int | ||||
| ossl_ed25519_verify(const uint8_t *tbs, size_t tbs_len, | ||||
|                     const uint8_t signature[64], const uint8_t public_key[32], | ||||
|                     const uint8_t dom2flag, const uint8_t phflag, const uint8_t csflag, | ||||
|                     const uint8_t *context, size_t context_len, | ||||
|                     OSSL_LIB_CTX *libctx, const char *propq); | ||||
| int | ||||
| ossl_ed448_public_from_private(OSSL_LIB_CTX *ctx, uint8_t out_public_key[57], | ||||
|                                const uint8_t private_key[57], const char *propq); | ||||
| int | ||||
| ossl_ed448_sign(OSSL_LIB_CTX *ctx, uint8_t *out_sig, | ||||
|                 const uint8_t *message, size_t message_len, | ||||
|                 const uint8_t public_key[57], const uint8_t private_key[57], | ||||
|                 const uint8_t *context, size_t context_len, | ||||
|                 const uint8_t phflag, const char *propq); | ||||
|  | ||||
| int | ||||
| ossl_ed448_verify(OSSL_LIB_CTX *ctx, | ||||
|                   const uint8_t *message, size_t message_len, | ||||
|                   const uint8_t signature[114], const uint8_t public_key[57], | ||||
|                   const uint8_t *context, size_t context_len, | ||||
|                   const uint8_t phflag, const char *propq); | ||||
|  | ||||
| int | ||||
| ossl_x448(uint8_t out_shared_key[56], const uint8_t private_key[56], | ||||
|           const uint8_t peer_public_value[56]); | ||||
| void | ||||
| ossl_x448_public_from_private(uint8_t out_public_value[56], | ||||
|                               const uint8_t private_key[56]); | ||||
|  | ||||
|  | ||||
| /* Backend support */ | ||||
| typedef enum { | ||||
|     KEY_OP_PUBLIC, | ||||
|     KEY_OP_PRIVATE, | ||||
|     KEY_OP_KEYGEN | ||||
| } ecx_key_op_t; | ||||
|  | ||||
| ECX_KEY *ossl_ecx_key_op(const X509_ALGOR *palg, | ||||
|                          const unsigned char *p, int plen, | ||||
|                          int pkey_id, ecx_key_op_t op, | ||||
|                          OSSL_LIB_CTX *libctx, const char *propq); | ||||
|  | ||||
| int ossl_ecx_public_from_private(ECX_KEY *key); | ||||
| int ossl_ecx_key_fromdata(ECX_KEY *ecx, const OSSL_PARAM params[], | ||||
|                           int include_private); | ||||
| ECX_KEY *ossl_ecx_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, | ||||
|                                  OSSL_LIB_CTX *libctx, const char *propq); | ||||
|  | ||||
| ECX_KEY *ossl_evp_pkey_get1_X25519(EVP_PKEY *pkey); | ||||
| ECX_KEY *ossl_evp_pkey_get1_X448(EVP_PKEY *pkey); | ||||
| ECX_KEY *ossl_evp_pkey_get1_ED25519(EVP_PKEY *pkey); | ||||
| ECX_KEY *ossl_evp_pkey_get1_ED448(EVP_PKEY *pkey); | ||||
| # endif /* OPENSSL_NO_ECX */ | ||||
| #endif | ||||
| @@ -1,20 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_ENCODER_H | ||||
| # define OSSL_CRYPTO_ENCODER_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/types.h> | ||||
|  | ||||
| int ossl_encoder_get_number(const OSSL_ENCODER *encoder); | ||||
| int ossl_encoder_store_cache_flush(OSSL_LIB_CTX *libctx); | ||||
| int ossl_encoder_store_remove_all_provided(const OSSL_PROVIDER *prov); | ||||
|  | ||||
| #endif | ||||
| @@ -1,27 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_ENCODERERR_H | ||||
| # define OSSL_CRYPTO_ENCODERERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| int ossl_err_load_OSSL_ENCODER_strings(void); | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,20 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #include <openssl/engine.h> | ||||
|  | ||||
| void engine_load_openssl_int(void); | ||||
| void engine_load_devcrypto_int(void); | ||||
| void engine_load_rdrand_int(void); | ||||
| void engine_load_dynamic_int(void); | ||||
| void engine_load_padlock_int(void); | ||||
| void engine_load_capi_int(void); | ||||
| void engine_load_dasync_int(void); | ||||
| void engine_load_afalg_int(void); | ||||
| void engine_cleanup_int(void); | ||||
| @@ -1,30 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_ENGINEERR_H | ||||
| # define OSSL_CRYPTO_ENGINEERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| # ifndef OPENSSL_NO_ENGINE | ||||
|  | ||||
| int ossl_err_load_ENGINE_strings(void); | ||||
| # endif | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,20 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_ERR_H | ||||
| # define OSSL_CRYPTO_ERR_H | ||||
| # pragma once | ||||
|  | ||||
| int ossl_err_load_ERR_strings(void); | ||||
| int ossl_err_load_crypto_strings(void); | ||||
| void err_cleanup(void); | ||||
| int err_shelve_state(void **); | ||||
| void err_unshelve_state(void *); | ||||
|  | ||||
| #endif | ||||
| @@ -1,76 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_ESS_H | ||||
| # define OSSL_CRYPTO_ESS_H | ||||
| # pragma once | ||||
|  | ||||
| /*- | ||||
|  * IssuerSerial ::= SEQUENCE { | ||||
|  *        issuer                  GeneralNames, | ||||
|  *        serialNumber            CertificateSerialNumber | ||||
|  * } | ||||
|  */ | ||||
|  | ||||
| struct ESS_issuer_serial { | ||||
|     STACK_OF(GENERAL_NAME) *issuer; | ||||
|     ASN1_INTEGER *serial; | ||||
| }; | ||||
|  | ||||
| /*- | ||||
|  * ESSCertID ::=  SEQUENCE { | ||||
|  *        certHash                Hash, | ||||
|  *        issuerSerial            IssuerSerial OPTIONAL | ||||
|  * } | ||||
|  */ | ||||
|  | ||||
| struct ESS_cert_id { | ||||
|     ASN1_OCTET_STRING *hash;    /* Always SHA-1 digest. */ | ||||
|     ESS_ISSUER_SERIAL *issuer_serial; | ||||
| }; | ||||
|  | ||||
| /*- | ||||
|  * SigningCertificate ::=  SEQUENCE { | ||||
|  *        certs                   SEQUENCE OF ESSCertID, | ||||
|  *        policies                SEQUENCE OF PolicyInformation OPTIONAL | ||||
|  * } | ||||
|  */ | ||||
|  | ||||
| struct ESS_signing_cert { | ||||
|     STACK_OF(ESS_CERT_ID) *cert_ids; | ||||
|     STACK_OF(POLICYINFO) *policy_info; | ||||
| }; | ||||
|  | ||||
| /*- | ||||
|  * ESSCertIDv2 ::=  SEQUENCE { | ||||
|  *        hashAlgorithm           AlgorithmIdentifier DEFAULT id-sha256, | ||||
|  *        certHash                Hash, | ||||
|  *        issuerSerial            IssuerSerial OPTIONAL | ||||
|  * } | ||||
|  */ | ||||
|  | ||||
| struct ESS_cert_id_v2_st { | ||||
|     X509_ALGOR *hash_alg;       /* Default: SHA-256 */ | ||||
|     ASN1_OCTET_STRING *hash; | ||||
|     ESS_ISSUER_SERIAL *issuer_serial; | ||||
| }; | ||||
|  | ||||
| /*- | ||||
|  * SigningCertificateV2 ::= SEQUENCE { | ||||
|  *        certs                   SEQUENCE OF ESSCertIDv2, | ||||
|  *        policies                SEQUENCE OF PolicyInformation OPTIONAL | ||||
|  * } | ||||
|  */ | ||||
|  | ||||
| struct ESS_signing_cert_v2_st { | ||||
|     STACK_OF(ESS_CERT_ID_V2) *cert_ids; | ||||
|     STACK_OF(POLICYINFO) *policy_info; | ||||
| }; | ||||
|  | ||||
| #endif /* OSSL_CRYPTO_ESS_H */ | ||||
| @@ -1,27 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_ESSERR_H | ||||
| # define OSSL_CRYPTO_ESSERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| int ossl_err_load_ESS_strings(void); | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,970 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2015-2023 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_EVP_H | ||||
| # define OSSL_CRYPTO_EVP_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/evp.h> | ||||
| # include <openssl/core_dispatch.h> | ||||
| # include "internal/refcount.h" | ||||
| # include "crypto/ecx.h" | ||||
|  | ||||
| /* | ||||
|  * Default PKCS5 PBE KDF salt lengths | ||||
|  * In RFC 8018, PBE1 uses 8 bytes (64 bits) for its salt length. | ||||
|  * It also specifies to use at least 8 bytes for PBES2. | ||||
|  * The NIST requirement for PBKDF2 is 128 bits so we use this as the | ||||
|  * default for PBE2 (scrypt and HKDF2) | ||||
|  */ | ||||
| # define PKCS5_DEFAULT_PBE1_SALT_LEN     PKCS5_SALT_LEN | ||||
| # define PKCS5_DEFAULT_PBE2_SALT_LEN     16 | ||||
| /* | ||||
|  * Don't free up md_ctx->pctx in EVP_MD_CTX_reset, use the reserved flag | ||||
|  * values in evp.h | ||||
|  */ | ||||
| #define EVP_MD_CTX_FLAG_KEEP_PKEY_CTX   0x0400 | ||||
| #define EVP_MD_CTX_FLAG_FINALISED       0x0800 | ||||
|  | ||||
| #define evp_pkey_ctx_is_legacy(ctx)                             \ | ||||
|     ((ctx)->keymgmt == NULL) | ||||
| #define evp_pkey_ctx_is_provided(ctx)                           \ | ||||
|     (!evp_pkey_ctx_is_legacy(ctx)) | ||||
|  | ||||
| struct evp_pkey_ctx_st { | ||||
|     /* Actual operation */ | ||||
|     int operation; | ||||
|  | ||||
|     /* | ||||
|      * Library context, property query, keytype and keymgmt associated with | ||||
|      * this context | ||||
|      */ | ||||
|     OSSL_LIB_CTX *libctx; | ||||
|     char *propquery; | ||||
|     const char *keytype; | ||||
|     /* If |pkey| below is set, this field is always a reference to its keymgmt */ | ||||
|     EVP_KEYMGMT *keymgmt; | ||||
|  | ||||
|     union { | ||||
|         struct { | ||||
|             void *genctx; | ||||
|         } keymgmt; | ||||
|  | ||||
|         struct { | ||||
|             EVP_KEYEXCH *exchange; | ||||
|             /* | ||||
|              * Opaque ctx returned from a providers exchange algorithm | ||||
|              * implementation OSSL_FUNC_keyexch_newctx() | ||||
|              */ | ||||
|             void *algctx; | ||||
|         } kex; | ||||
|  | ||||
|         struct { | ||||
|             EVP_SIGNATURE *signature; | ||||
|             /* | ||||
|              * Opaque ctx returned from a providers signature algorithm | ||||
|              * implementation OSSL_FUNC_signature_newctx() | ||||
|              */ | ||||
|             void *algctx; | ||||
|         } sig; | ||||
|  | ||||
|         struct { | ||||
|             EVP_ASYM_CIPHER *cipher; | ||||
|             /* | ||||
|              * Opaque ctx returned from a providers asymmetric cipher algorithm | ||||
|              * implementation OSSL_FUNC_asym_cipher_newctx() | ||||
|              */ | ||||
|             void *algctx; | ||||
|         } ciph; | ||||
|         struct { | ||||
|             EVP_KEM *kem; | ||||
|             /* | ||||
|              * Opaque ctx returned from a providers KEM algorithm | ||||
|              * implementation OSSL_FUNC_kem_newctx() | ||||
|              */ | ||||
|             void *algctx; | ||||
|         } encap; | ||||
|     } op; | ||||
|  | ||||
|     /* | ||||
|      * Cached parameters.  Inits of operations that depend on these should | ||||
|      * call evp_pkey_ctx_use_delayed_data() when the operation has been set | ||||
|      * up properly. | ||||
|      */ | ||||
|     struct { | ||||
|         /* Distinguishing Identifier, ISO/IEC 15946-3, FIPS 196 */ | ||||
|         char *dist_id_name; /* The name used with EVP_PKEY_CTX_ctrl_str() */ | ||||
|         void *dist_id;      /* The distinguishing ID itself */ | ||||
|         size_t dist_id_len; /* The length of the distinguishing ID */ | ||||
|  | ||||
|         /* Indicators of what has been set.  Keep them together! */ | ||||
|         unsigned int dist_id_set : 1; | ||||
|     } cached_parameters; | ||||
|  | ||||
|     /* Application specific data, usually used by the callback */ | ||||
|     void *app_data; | ||||
|     /* Keygen callback */ | ||||
|     EVP_PKEY_gen_cb *pkey_gencb; | ||||
|     /* implementation specific keygen data */ | ||||
|     int *keygen_info; | ||||
|     int keygen_info_count; | ||||
|  | ||||
|     /* Legacy fields below */ | ||||
|  | ||||
|     /* EVP_PKEY identity */ | ||||
|     int legacy_keytype; | ||||
|     /* Method associated with this operation */ | ||||
|     const EVP_PKEY_METHOD *pmeth; | ||||
|     /* Engine that implements this method or NULL if builtin */ | ||||
|     ENGINE *engine; | ||||
|     /* Key: may be NULL */ | ||||
|     EVP_PKEY *pkey; | ||||
|     /* Peer key for key agreement, may be NULL */ | ||||
|     EVP_PKEY *peerkey; | ||||
|     /* Algorithm specific data */ | ||||
|     void *data; | ||||
|     /* Indicator if digest_custom needs to be called */ | ||||
|     unsigned int flag_call_digest_custom:1; | ||||
|     /* | ||||
|      * Used to support taking custody of memory in the case of a provider being | ||||
|      * used with the deprecated EVP_PKEY_CTX_set_rsa_keygen_pubexp() API. This | ||||
|      * member should NOT be used for any other purpose and should be removed | ||||
|      * when said deprecated API is excised completely. | ||||
|      */ | ||||
|     BIGNUM *rsa_pubexp; | ||||
| } /* EVP_PKEY_CTX */ ; | ||||
|  | ||||
| #define EVP_PKEY_FLAG_DYNAMIC   1 | ||||
|  | ||||
| struct evp_pkey_method_st { | ||||
|     int pkey_id; | ||||
|     int flags; | ||||
|     int (*init) (EVP_PKEY_CTX *ctx); | ||||
|     int (*copy) (EVP_PKEY_CTX *dst, const EVP_PKEY_CTX *src); | ||||
|     void (*cleanup) (EVP_PKEY_CTX *ctx); | ||||
|     int (*paramgen_init) (EVP_PKEY_CTX *ctx); | ||||
|     int (*paramgen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey); | ||||
|     int (*keygen_init) (EVP_PKEY_CTX *ctx); | ||||
|     int (*keygen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey); | ||||
|     int (*sign_init) (EVP_PKEY_CTX *ctx); | ||||
|     int (*sign) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, | ||||
|                  const unsigned char *tbs, size_t tbslen); | ||||
|     int (*verify_init) (EVP_PKEY_CTX *ctx); | ||||
|     int (*verify) (EVP_PKEY_CTX *ctx, | ||||
|                    const unsigned char *sig, size_t siglen, | ||||
|                    const unsigned char *tbs, size_t tbslen); | ||||
|     int (*verify_recover_init) (EVP_PKEY_CTX *ctx); | ||||
|     int (*verify_recover) (EVP_PKEY_CTX *ctx, | ||||
|                            unsigned char *rout, size_t *routlen, | ||||
|                            const unsigned char *sig, size_t siglen); | ||||
|     int (*signctx_init) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx); | ||||
|     int (*signctx) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, | ||||
|                     EVP_MD_CTX *mctx); | ||||
|     int (*verifyctx_init) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx); | ||||
|     int (*verifyctx) (EVP_PKEY_CTX *ctx, const unsigned char *sig, int siglen, | ||||
|                       EVP_MD_CTX *mctx); | ||||
|     int (*encrypt_init) (EVP_PKEY_CTX *ctx); | ||||
|     int (*encrypt) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, | ||||
|                     const unsigned char *in, size_t inlen); | ||||
|     int (*decrypt_init) (EVP_PKEY_CTX *ctx); | ||||
|     int (*decrypt) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, | ||||
|                     const unsigned char *in, size_t inlen); | ||||
|     int (*derive_init) (EVP_PKEY_CTX *ctx); | ||||
|     int (*derive) (EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen); | ||||
|     int (*ctrl) (EVP_PKEY_CTX *ctx, int type, int p1, void *p2); | ||||
|     int (*ctrl_str) (EVP_PKEY_CTX *ctx, const char *type, const char *value); | ||||
|     int (*digestsign) (EVP_MD_CTX *ctx, unsigned char *sig, size_t *siglen, | ||||
|                        const unsigned char *tbs, size_t tbslen); | ||||
|     int (*digestverify) (EVP_MD_CTX *ctx, const unsigned char *sig, | ||||
|                          size_t siglen, const unsigned char *tbs, | ||||
|                          size_t tbslen); | ||||
|     int (*check) (EVP_PKEY *pkey); | ||||
|     int (*public_check) (EVP_PKEY *pkey); | ||||
|     int (*param_check) (EVP_PKEY *pkey); | ||||
|  | ||||
|     int (*digest_custom) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx); | ||||
| } /* EVP_PKEY_METHOD */ ; | ||||
|  | ||||
| DEFINE_STACK_OF_CONST(EVP_PKEY_METHOD) | ||||
|  | ||||
| void evp_pkey_set_cb_translate(BN_GENCB *cb, EVP_PKEY_CTX *ctx); | ||||
|  | ||||
| const EVP_PKEY_METHOD *ossl_dh_pkey_method(void); | ||||
| const EVP_PKEY_METHOD *ossl_dhx_pkey_method(void); | ||||
| const EVP_PKEY_METHOD *ossl_dsa_pkey_method(void); | ||||
| const EVP_PKEY_METHOD *ossl_ec_pkey_method(void); | ||||
| const EVP_PKEY_METHOD *ossl_ecx25519_pkey_method(void); | ||||
| const EVP_PKEY_METHOD *ossl_ecx448_pkey_method(void); | ||||
| const EVP_PKEY_METHOD *ossl_ed25519_pkey_method(void); | ||||
| const EVP_PKEY_METHOD *ossl_ed448_pkey_method(void); | ||||
| const EVP_PKEY_METHOD *ossl_rsa_pkey_method(void); | ||||
| const EVP_PKEY_METHOD *ossl_rsa_pss_pkey_method(void); | ||||
|  | ||||
| struct evp_mac_st { | ||||
|     OSSL_PROVIDER *prov; | ||||
|     int name_id; | ||||
|     char *type_name; | ||||
|     const char *description; | ||||
|  | ||||
|     CRYPTO_REF_COUNT refcnt; | ||||
|  | ||||
|     OSSL_FUNC_mac_newctx_fn *newctx; | ||||
|     OSSL_FUNC_mac_dupctx_fn *dupctx; | ||||
|     OSSL_FUNC_mac_freectx_fn *freectx; | ||||
|     OSSL_FUNC_mac_init_fn *init; | ||||
|     OSSL_FUNC_mac_update_fn *update; | ||||
|     OSSL_FUNC_mac_final_fn *final; | ||||
|     OSSL_FUNC_mac_gettable_params_fn *gettable_params; | ||||
|     OSSL_FUNC_mac_gettable_ctx_params_fn *gettable_ctx_params; | ||||
|     OSSL_FUNC_mac_settable_ctx_params_fn *settable_ctx_params; | ||||
|     OSSL_FUNC_mac_get_params_fn *get_params; | ||||
|     OSSL_FUNC_mac_get_ctx_params_fn *get_ctx_params; | ||||
|     OSSL_FUNC_mac_set_ctx_params_fn *set_ctx_params; | ||||
| }; | ||||
|  | ||||
| struct evp_kdf_st { | ||||
|     OSSL_PROVIDER *prov; | ||||
|     int name_id; | ||||
|     char *type_name; | ||||
|     const char *description; | ||||
|     CRYPTO_REF_COUNT refcnt; | ||||
|  | ||||
|     OSSL_FUNC_kdf_newctx_fn *newctx; | ||||
|     OSSL_FUNC_kdf_dupctx_fn *dupctx; | ||||
|     OSSL_FUNC_kdf_freectx_fn *freectx; | ||||
|     OSSL_FUNC_kdf_reset_fn *reset; | ||||
|     OSSL_FUNC_kdf_derive_fn *derive; | ||||
|     OSSL_FUNC_kdf_gettable_params_fn *gettable_params; | ||||
|     OSSL_FUNC_kdf_gettable_ctx_params_fn *gettable_ctx_params; | ||||
|     OSSL_FUNC_kdf_settable_ctx_params_fn *settable_ctx_params; | ||||
|     OSSL_FUNC_kdf_get_params_fn *get_params; | ||||
|     OSSL_FUNC_kdf_get_ctx_params_fn *get_ctx_params; | ||||
|     OSSL_FUNC_kdf_set_ctx_params_fn *set_ctx_params; | ||||
| }; | ||||
|  | ||||
| #define EVP_ORIG_DYNAMIC    0 | ||||
| #define EVP_ORIG_GLOBAL     1 | ||||
| #define EVP_ORIG_METH       2 | ||||
|  | ||||
| struct evp_md_st { | ||||
|     /* nid */ | ||||
|     int type; | ||||
|  | ||||
|     /* Legacy structure members */ | ||||
|     int pkey_type; | ||||
|     int md_size; | ||||
|     unsigned long flags; | ||||
|     int origin; | ||||
|     int (*init) (EVP_MD_CTX *ctx); | ||||
|     int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count); | ||||
|     int (*final) (EVP_MD_CTX *ctx, unsigned char *md); | ||||
|     int (*copy) (EVP_MD_CTX *to, const EVP_MD_CTX *from); | ||||
|     int (*cleanup) (EVP_MD_CTX *ctx); | ||||
|     int block_size; | ||||
|     int ctx_size;               /* how big does the ctx->md_data need to be */ | ||||
|     /* control function */ | ||||
|     int (*md_ctrl) (EVP_MD_CTX *ctx, int cmd, int p1, void *p2); | ||||
|  | ||||
|     /* New structure members */ | ||||
|     /* Above comment to be removed when legacy has gone */ | ||||
|     int name_id; | ||||
|     char *type_name; | ||||
|     const char *description; | ||||
|     OSSL_PROVIDER *prov; | ||||
|     CRYPTO_REF_COUNT refcnt; | ||||
|     OSSL_FUNC_digest_newctx_fn *newctx; | ||||
|     OSSL_FUNC_digest_init_fn *dinit; | ||||
|     OSSL_FUNC_digest_update_fn *dupdate; | ||||
|     OSSL_FUNC_digest_final_fn *dfinal; | ||||
|     OSSL_FUNC_digest_digest_fn *digest; | ||||
|     OSSL_FUNC_digest_freectx_fn *freectx; | ||||
|     OSSL_FUNC_digest_dupctx_fn *dupctx; | ||||
|     OSSL_FUNC_digest_get_params_fn *get_params; | ||||
|     OSSL_FUNC_digest_set_ctx_params_fn *set_ctx_params; | ||||
|     OSSL_FUNC_digest_get_ctx_params_fn *get_ctx_params; | ||||
|     OSSL_FUNC_digest_gettable_params_fn *gettable_params; | ||||
|     OSSL_FUNC_digest_settable_ctx_params_fn *settable_ctx_params; | ||||
|     OSSL_FUNC_digest_gettable_ctx_params_fn *gettable_ctx_params; | ||||
|  | ||||
| } /* EVP_MD */ ; | ||||
|  | ||||
| struct evp_cipher_st { | ||||
|     int nid; | ||||
|  | ||||
|     int block_size; | ||||
|     /* Default value for variable length ciphers */ | ||||
|     int key_len; | ||||
|     int iv_len; | ||||
|  | ||||
|     /* Legacy structure members */ | ||||
|     /* Various flags */ | ||||
|     unsigned long flags; | ||||
|     /* How the EVP_CIPHER was created. */ | ||||
|     int origin; | ||||
|     /* init key */ | ||||
|     int (*init) (EVP_CIPHER_CTX *ctx, const unsigned char *key, | ||||
|                  const unsigned char *iv, int enc); | ||||
|     /* encrypt/decrypt data */ | ||||
|     int (*do_cipher) (EVP_CIPHER_CTX *ctx, unsigned char *out, | ||||
|                       const unsigned char *in, size_t inl); | ||||
|     /* cleanup ctx */ | ||||
|     int (*cleanup) (EVP_CIPHER_CTX *); | ||||
|     /* how big ctx->cipher_data needs to be */ | ||||
|     int ctx_size; | ||||
|     /* Populate a ASN1_TYPE with parameters */ | ||||
|     int (*set_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *); | ||||
|     /* Get parameters from a ASN1_TYPE */ | ||||
|     int (*get_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *); | ||||
|     /* Miscellaneous operations */ | ||||
|     int (*ctrl) (EVP_CIPHER_CTX *, int type, int arg, void *ptr); | ||||
|     /* Application data */ | ||||
|     void *app_data; | ||||
|  | ||||
|     /* New structure members */ | ||||
|     /* Above comment to be removed when legacy has gone */ | ||||
|     int name_id; | ||||
|     char *type_name; | ||||
|     const char *description; | ||||
|     OSSL_PROVIDER *prov; | ||||
|     CRYPTO_REF_COUNT refcnt; | ||||
|     OSSL_FUNC_cipher_newctx_fn *newctx; | ||||
|     OSSL_FUNC_cipher_encrypt_init_fn *einit; | ||||
|     OSSL_FUNC_cipher_decrypt_init_fn *dinit; | ||||
|     OSSL_FUNC_cipher_update_fn *cupdate; | ||||
|     OSSL_FUNC_cipher_final_fn *cfinal; | ||||
|     OSSL_FUNC_cipher_cipher_fn *ccipher; | ||||
|     OSSL_FUNC_cipher_freectx_fn *freectx; | ||||
|     OSSL_FUNC_cipher_dupctx_fn *dupctx; | ||||
|     OSSL_FUNC_cipher_get_params_fn *get_params; | ||||
|     OSSL_FUNC_cipher_get_ctx_params_fn *get_ctx_params; | ||||
|     OSSL_FUNC_cipher_set_ctx_params_fn *set_ctx_params; | ||||
|     OSSL_FUNC_cipher_gettable_params_fn *gettable_params; | ||||
|     OSSL_FUNC_cipher_gettable_ctx_params_fn *gettable_ctx_params; | ||||
|     OSSL_FUNC_cipher_settable_ctx_params_fn *settable_ctx_params; | ||||
| } /* EVP_CIPHER */ ; | ||||
|  | ||||
| /* Macros to code block cipher wrappers */ | ||||
|  | ||||
| /* Wrapper functions for each cipher mode */ | ||||
|  | ||||
| #define EVP_C_DATA(kstruct, ctx) \ | ||||
|         ((kstruct *)EVP_CIPHER_CTX_get_cipher_data(ctx)) | ||||
|  | ||||
| #define BLOCK_CIPHER_ecb_loop() \ | ||||
|         size_t i, bl; \ | ||||
|         bl = EVP_CIPHER_CTX_get0_cipher(ctx)->block_size;    \ | ||||
|         if (inl < bl) return 1;\ | ||||
|         inl -= bl; \ | ||||
|         for (i=0; i <= inl; i+=bl) | ||||
|  | ||||
| #define BLOCK_CIPHER_func_ecb(cname, cprefix, kstruct, ksched) \ | ||||
| static int cname##_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) \ | ||||
| {\ | ||||
|         BLOCK_CIPHER_ecb_loop() \ | ||||
|             cprefix##_ecb_encrypt(in + i, out + i, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_is_encrypting(ctx)); \ | ||||
|         return 1;\ | ||||
| } | ||||
|  | ||||
| #define EVP_MAXCHUNK ((size_t)1 << 30) | ||||
|  | ||||
| #define BLOCK_CIPHER_func_ofb(cname, cprefix, cbits, kstruct, ksched) \ | ||||
|     static int cname##_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) \ | ||||
| {\ | ||||
|         while(inl>=EVP_MAXCHUNK) {\ | ||||
|             int num = EVP_CIPHER_CTX_get_num(ctx);\ | ||||
|             cprefix##_ofb##cbits##_encrypt(in, out, (long)EVP_MAXCHUNK, &EVP_C_DATA(kstruct,ctx)->ksched, ctx->iv, &num); \ | ||||
|             EVP_CIPHER_CTX_set_num(ctx, num);\ | ||||
|             inl-=EVP_MAXCHUNK;\ | ||||
|             in +=EVP_MAXCHUNK;\ | ||||
|             out+=EVP_MAXCHUNK;\ | ||||
|         }\ | ||||
|         if (inl) {\ | ||||
|             int num = EVP_CIPHER_CTX_get_num(ctx);\ | ||||
|             cprefix##_ofb##cbits##_encrypt(in, out, (long)inl, &EVP_C_DATA(kstruct,ctx)->ksched, ctx->iv, &num); \ | ||||
|             EVP_CIPHER_CTX_set_num(ctx, num);\ | ||||
|         }\ | ||||
|         return 1;\ | ||||
| } | ||||
|  | ||||
| #define BLOCK_CIPHER_func_cbc(cname, cprefix, kstruct, ksched) \ | ||||
| static int cname##_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) \ | ||||
| {\ | ||||
|         while(inl>=EVP_MAXCHUNK) \ | ||||
|             {\ | ||||
|             cprefix##_cbc_encrypt(in, out, (long)EVP_MAXCHUNK, &EVP_C_DATA(kstruct,ctx)->ksched, ctx->iv, EVP_CIPHER_CTX_is_encrypting(ctx));\ | ||||
|             inl-=EVP_MAXCHUNK;\ | ||||
|             in +=EVP_MAXCHUNK;\ | ||||
|             out+=EVP_MAXCHUNK;\ | ||||
|             }\ | ||||
|         if (inl)\ | ||||
|             cprefix##_cbc_encrypt(in, out, (long)inl, &EVP_C_DATA(kstruct,ctx)->ksched, ctx->iv, EVP_CIPHER_CTX_is_encrypting(ctx));\ | ||||
|         return 1;\ | ||||
| } | ||||
|  | ||||
| #define BLOCK_CIPHER_func_cfb(cname, cprefix, cbits, kstruct, ksched)  \ | ||||
| static int cname##_cfb##cbits##_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) \ | ||||
| {\ | ||||
|     size_t chunk = EVP_MAXCHUNK;\ | ||||
|     if (cbits == 1)  chunk >>= 3;\ | ||||
|     if (inl < chunk) chunk = inl;\ | ||||
|     while (inl && inl >= chunk)\ | ||||
|     {\ | ||||
|         int num = EVP_CIPHER_CTX_get_num(ctx);\ | ||||
|         cprefix##_cfb##cbits##_encrypt(in, out, (long) \ | ||||
|             ((cbits == 1) \ | ||||
|                 && !EVP_CIPHER_CTX_test_flags(ctx, EVP_CIPH_FLAG_LENGTH_BITS) \ | ||||
|                 ? chunk*8 : chunk), \ | ||||
|             &EVP_C_DATA(kstruct, ctx)->ksched, ctx->iv,\ | ||||
|             &num, EVP_CIPHER_CTX_is_encrypting(ctx));\ | ||||
|         EVP_CIPHER_CTX_set_num(ctx, num);\ | ||||
|         inl -= chunk;\ | ||||
|         in += chunk;\ | ||||
|         out += chunk;\ | ||||
|         if (inl < chunk) chunk = inl;\ | ||||
|     }\ | ||||
|     return 1;\ | ||||
| } | ||||
|  | ||||
| #define BLOCK_CIPHER_all_funcs(cname, cprefix, cbits, kstruct, ksched) \ | ||||
|         BLOCK_CIPHER_func_cbc(cname, cprefix, kstruct, ksched) \ | ||||
|         BLOCK_CIPHER_func_cfb(cname, cprefix, cbits, kstruct, ksched) \ | ||||
|         BLOCK_CIPHER_func_ecb(cname, cprefix, kstruct, ksched) \ | ||||
|         BLOCK_CIPHER_func_ofb(cname, cprefix, cbits, kstruct, ksched) | ||||
|  | ||||
| #define BLOCK_CIPHER_def1(cname, nmode, mode, MODE, kstruct, nid, block_size, \ | ||||
|                           key_len, iv_len, flags, init_key, cleanup, \ | ||||
|                           set_asn1, get_asn1, ctrl) \ | ||||
| static const EVP_CIPHER cname##_##mode = { \ | ||||
|         nid##_##nmode, block_size, key_len, iv_len, \ | ||||
|         flags | EVP_CIPH_##MODE##_MODE, \ | ||||
|         EVP_ORIG_GLOBAL, \ | ||||
|         init_key, \ | ||||
|         cname##_##mode##_cipher, \ | ||||
|         cleanup, \ | ||||
|         sizeof(kstruct), \ | ||||
|         set_asn1, get_asn1,\ | ||||
|         ctrl, \ | ||||
|         NULL \ | ||||
| }; \ | ||||
| const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; } | ||||
|  | ||||
| #define BLOCK_CIPHER_def_cbc(cname, kstruct, nid, block_size, key_len, \ | ||||
|                              iv_len, flags, init_key, cleanup, set_asn1, \ | ||||
|                              get_asn1, ctrl) \ | ||||
| BLOCK_CIPHER_def1(cname, cbc, cbc, CBC, kstruct, nid, block_size, key_len, \ | ||||
|                   iv_len, flags, init_key, cleanup, set_asn1, get_asn1, ctrl) | ||||
|  | ||||
| #define BLOCK_CIPHER_def_cfb(cname, kstruct, nid, key_len, \ | ||||
|                              iv_len, cbits, flags, init_key, cleanup, \ | ||||
|                              set_asn1, get_asn1, ctrl) \ | ||||
| BLOCK_CIPHER_def1(cname, cfb##cbits, cfb##cbits, CFB, kstruct, nid, 1, \ | ||||
|                   key_len, iv_len, flags, init_key, cleanup, set_asn1, \ | ||||
|                   get_asn1, ctrl) | ||||
|  | ||||
| #define BLOCK_CIPHER_def_ofb(cname, kstruct, nid, key_len, \ | ||||
|                              iv_len, cbits, flags, init_key, cleanup, \ | ||||
|                              set_asn1, get_asn1, ctrl) \ | ||||
| BLOCK_CIPHER_def1(cname, ofb##cbits, ofb, OFB, kstruct, nid, 1, \ | ||||
|                   key_len, iv_len, flags, init_key, cleanup, set_asn1, \ | ||||
|                   get_asn1, ctrl) | ||||
|  | ||||
| #define BLOCK_CIPHER_def_ecb(cname, kstruct, nid, block_size, key_len, \ | ||||
|                              flags, init_key, cleanup, set_asn1, \ | ||||
|                              get_asn1, ctrl) \ | ||||
| BLOCK_CIPHER_def1(cname, ecb, ecb, ECB, kstruct, nid, block_size, key_len, \ | ||||
|                   0, flags, init_key, cleanup, set_asn1, get_asn1, ctrl) | ||||
|  | ||||
| #define BLOCK_CIPHER_defs(cname, kstruct, \ | ||||
|                           nid, block_size, key_len, iv_len, cbits, flags, \ | ||||
|                           init_key, cleanup, set_asn1, get_asn1, ctrl) \ | ||||
| BLOCK_CIPHER_def_cbc(cname, kstruct, nid, block_size, key_len, iv_len, flags, \ | ||||
|                      init_key, cleanup, set_asn1, get_asn1, ctrl) \ | ||||
| BLOCK_CIPHER_def_cfb(cname, kstruct, nid, key_len, iv_len, cbits, \ | ||||
|                      flags, init_key, cleanup, set_asn1, get_asn1, ctrl) \ | ||||
| BLOCK_CIPHER_def_ofb(cname, kstruct, nid, key_len, iv_len, cbits, \ | ||||
|                      flags, init_key, cleanup, set_asn1, get_asn1, ctrl) \ | ||||
| BLOCK_CIPHER_def_ecb(cname, kstruct, nid, block_size, key_len, flags, \ | ||||
|                      init_key, cleanup, set_asn1, get_asn1, ctrl) | ||||
|  | ||||
| /*- | ||||
| #define BLOCK_CIPHER_defs(cname, kstruct, \ | ||||
|                                 nid, block_size, key_len, iv_len, flags,\ | ||||
|                                  init_key, cleanup, set_asn1, get_asn1, ctrl)\ | ||||
| static const EVP_CIPHER cname##_cbc = {\ | ||||
|         nid##_cbc, block_size, key_len, iv_len, \ | ||||
|         flags | EVP_CIPH_CBC_MODE,\ | ||||
|         EVP_ORIG_GLOBAL,\ | ||||
|         init_key,\ | ||||
|         cname##_cbc_cipher,\ | ||||
|         cleanup,\ | ||||
|         sizeof(EVP_CIPHER_CTX)-sizeof((((EVP_CIPHER_CTX *)NULL)->c))+\ | ||||
|                 sizeof((((EVP_CIPHER_CTX *)NULL)->c.kstruct)),\ | ||||
|         set_asn1, get_asn1,\ | ||||
|         ctrl, \ | ||||
|         NULL \ | ||||
| };\ | ||||
| const EVP_CIPHER *EVP_##cname##_cbc(void) { return &cname##_cbc; }\ | ||||
| static const EVP_CIPHER cname##_cfb = {\ | ||||
|         nid##_cfb64, 1, key_len, iv_len, \ | ||||
|         flags | EVP_CIPH_CFB_MODE,\ | ||||
|         EVP_ORIG_GLOBAL,\ | ||||
|         init_key,\ | ||||
|         cname##_cfb_cipher,\ | ||||
|         cleanup,\ | ||||
|         sizeof(EVP_CIPHER_CTX)-sizeof((((EVP_CIPHER_CTX *)NULL)->c))+\ | ||||
|                 sizeof((((EVP_CIPHER_CTX *)NULL)->c.kstruct)),\ | ||||
|         set_asn1, get_asn1,\ | ||||
|         ctrl,\ | ||||
|         NULL \ | ||||
| };\ | ||||
| const EVP_CIPHER *EVP_##cname##_cfb(void) { return &cname##_cfb; }\ | ||||
| static const EVP_CIPHER cname##_ofb = {\ | ||||
|         nid##_ofb64, 1, key_len, iv_len, \ | ||||
|         flags | EVP_CIPH_OFB_MODE,\ | ||||
|         EVP_ORIG_GLOBAL,\ | ||||
|         init_key,\ | ||||
|         cname##_ofb_cipher,\ | ||||
|         cleanup,\ | ||||
|         sizeof(EVP_CIPHER_CTX)-sizeof((((EVP_CIPHER_CTX *)NULL)->c))+\ | ||||
|                 sizeof((((EVP_CIPHER_CTX *)NULL)->c.kstruct)),\ | ||||
|         set_asn1, get_asn1,\ | ||||
|         ctrl,\ | ||||
|         NULL \ | ||||
| };\ | ||||
| const EVP_CIPHER *EVP_##cname##_ofb(void) { return &cname##_ofb; }\ | ||||
| static const EVP_CIPHER cname##_ecb = {\ | ||||
|         nid##_ecb, block_size, key_len, iv_len, \ | ||||
|         flags | EVP_CIPH_ECB_MODE,\ | ||||
|         EVP_ORIG_GLOBAL,\ | ||||
|         init_key,\ | ||||
|         cname##_ecb_cipher,\ | ||||
|         cleanup,\ | ||||
|         sizeof(EVP_CIPHER_CTX)-sizeof((((EVP_CIPHER_CTX *)NULL)->c))+\ | ||||
|                 sizeof((((EVP_CIPHER_CTX *)NULL)->c.kstruct)),\ | ||||
|         set_asn1, get_asn1,\ | ||||
|         ctrl,\ | ||||
|         NULL \ | ||||
| };\ | ||||
| const EVP_CIPHER *EVP_##cname##_ecb(void) { return &cname##_ecb; } | ||||
| */ | ||||
|  | ||||
| #define IMPLEMENT_BLOCK_CIPHER(cname, ksched, cprefix, kstruct, nid, \ | ||||
|                                block_size, key_len, iv_len, cbits, \ | ||||
|                                flags, init_key, \ | ||||
|                                cleanup, set_asn1, get_asn1, ctrl) \ | ||||
|         BLOCK_CIPHER_all_funcs(cname, cprefix, cbits, kstruct, ksched) \ | ||||
|         BLOCK_CIPHER_defs(cname, kstruct, nid, block_size, key_len, iv_len, \ | ||||
|                           cbits, flags, init_key, cleanup, set_asn1, \ | ||||
|                           get_asn1, ctrl) | ||||
|  | ||||
| #define IMPLEMENT_CFBR(cipher,cprefix,kstruct,ksched,keysize,cbits,iv_len,fl) \ | ||||
|         BLOCK_CIPHER_func_cfb(cipher##_##keysize,cprefix,cbits,kstruct,ksched) \ | ||||
|         BLOCK_CIPHER_def_cfb(cipher##_##keysize,kstruct, \ | ||||
|                              NID_##cipher##_##keysize, keysize/8, iv_len, cbits, \ | ||||
|                              (fl)|EVP_CIPH_FLAG_DEFAULT_ASN1, \ | ||||
|                              cipher##_init_key, NULL, NULL, NULL, NULL) | ||||
|  | ||||
| typedef struct { | ||||
|     unsigned char iv[EVP_MAX_IV_LENGTH]; | ||||
|     unsigned int iv_len; | ||||
|     unsigned int tag_len; | ||||
| } evp_cipher_aead_asn1_params; | ||||
|  | ||||
| int evp_cipher_param_to_asn1_ex(EVP_CIPHER_CTX *c, ASN1_TYPE *type, | ||||
|                                 evp_cipher_aead_asn1_params *params); | ||||
|  | ||||
| int evp_cipher_asn1_to_param_ex(EVP_CIPHER_CTX *c, ASN1_TYPE *type, | ||||
|                                 evp_cipher_aead_asn1_params *params); | ||||
|  | ||||
| /* | ||||
|  * To support transparent execution of operation in backends other | ||||
|  * than the "origin" key, we support transparent export/import to | ||||
|  * those providers, and maintain a cache of the imported keydata, | ||||
|  * so we don't need to redo the export/import every time we perform | ||||
|  * the same operation in that same provider. | ||||
|  * This requires that the "origin" backend (whether it's a legacy or a | ||||
|  * provider "origin") implements exports, and that the target provider | ||||
|  * has an EVP_KEYMGMT that implements import. | ||||
|  */ | ||||
| typedef struct { | ||||
|     EVP_KEYMGMT *keymgmt; | ||||
|     void *keydata; | ||||
|     int selection; | ||||
| } OP_CACHE_ELEM; | ||||
|  | ||||
| DEFINE_STACK_OF(OP_CACHE_ELEM) | ||||
|  | ||||
| /* | ||||
|  * An EVP_PKEY can have the following states: | ||||
|  * | ||||
|  * untyped & empty: | ||||
|  * | ||||
|  *     type == EVP_PKEY_NONE && keymgmt == NULL | ||||
|  * | ||||
|  * typed & empty: | ||||
|  * | ||||
|  *     (type != EVP_PKEY_NONE && pkey.ptr == NULL)      ## legacy (libcrypto only) | ||||
|  *     || (keymgmt != NULL && keydata == NULL)          ## provider side | ||||
|  * | ||||
|  * fully assigned: | ||||
|  * | ||||
|  *     (type != EVP_PKEY_NONE && pkey.ptr != NULL)      ## legacy (libcrypto only) | ||||
|  *     || (keymgmt != NULL && keydata != NULL)          ## provider side | ||||
|  * | ||||
|  * The easiest way to detect a legacy key is: | ||||
|  * | ||||
|  *     keymgmt == NULL && type != EVP_PKEY_NONE | ||||
|  * | ||||
|  * The easiest way to detect a provider side key is: | ||||
|  * | ||||
|  *     keymgmt != NULL | ||||
|  */ | ||||
| #define evp_pkey_is_blank(pk)                                   \ | ||||
|     ((pk)->type == EVP_PKEY_NONE && (pk)->keymgmt == NULL) | ||||
| #define evp_pkey_is_typed(pk)                                   \ | ||||
|     ((pk)->type != EVP_PKEY_NONE || (pk)->keymgmt != NULL) | ||||
| #ifndef FIPS_MODULE | ||||
| # define evp_pkey_is_assigned(pk)                               \ | ||||
|     ((pk)->pkey.ptr != NULL || (pk)->keydata != NULL) | ||||
| #else | ||||
| # define evp_pkey_is_assigned(pk)                               \ | ||||
|     ((pk)->keydata != NULL) | ||||
| #endif | ||||
| #define evp_pkey_is_legacy(pk)                                  \ | ||||
|     ((pk)->type != EVP_PKEY_NONE && (pk)->keymgmt == NULL) | ||||
| #define evp_pkey_is_provided(pk)                                \ | ||||
|     ((pk)->keymgmt != NULL) | ||||
|  | ||||
| union legacy_pkey_st { | ||||
|     void *ptr; | ||||
|     struct rsa_st *rsa;     /* RSA */ | ||||
| #  ifndef OPENSSL_NO_DSA | ||||
|     struct dsa_st *dsa;     /* DSA */ | ||||
| #  endif | ||||
| #  ifndef OPENSSL_NO_DH | ||||
|     struct dh_st *dh;       /* DH */ | ||||
| #  endif | ||||
| #  ifndef OPENSSL_NO_EC | ||||
|     struct ec_key_st *ec;   /* ECC */ | ||||
| #   ifndef OPENSSL_NO_ECX | ||||
|     ECX_KEY *ecx;           /* X25519, X448, Ed25519, Ed448 */ | ||||
| #   endif | ||||
| #  endif | ||||
| }; | ||||
|  | ||||
| struct evp_pkey_st { | ||||
|     /* == Legacy attributes == */ | ||||
|     int type; | ||||
|     int save_type; | ||||
|  | ||||
| # ifndef FIPS_MODULE | ||||
|     /* | ||||
|      * Legacy key "origin" is composed of a pointer to an EVP_PKEY_ASN1_METHOD, | ||||
|      * a pointer to a low level key and possibly a pointer to an engine. | ||||
|      */ | ||||
|     const EVP_PKEY_ASN1_METHOD *ameth; | ||||
|     ENGINE *engine; | ||||
|     ENGINE *pmeth_engine; /* If not NULL public key ENGINE to use */ | ||||
|  | ||||
|     /* Union to store the reference to an origin legacy key */ | ||||
|     union legacy_pkey_st pkey; | ||||
|  | ||||
|     /* Union to store the reference to a non-origin legacy key */ | ||||
|     union legacy_pkey_st legacy_cache_pkey; | ||||
| # endif | ||||
|  | ||||
|     /* == Common attributes == */ | ||||
|     CRYPTO_REF_COUNT references; | ||||
|     CRYPTO_RWLOCK *lock; | ||||
| #ifndef FIPS_MODULE | ||||
|     STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */ | ||||
|     int save_parameters; | ||||
|     unsigned int foreign:1; /* the low-level key is using an engine or an app-method */ | ||||
|     CRYPTO_EX_DATA ex_data; | ||||
| #endif | ||||
|  | ||||
|     /* == Provider attributes == */ | ||||
|  | ||||
|     /* | ||||
|      * Provider keydata "origin" is composed of a pointer to an EVP_KEYMGMT | ||||
|      * and a pointer to the provider side key data.  This is never used at | ||||
|      * the same time as the legacy key data above. | ||||
|      */ | ||||
|     EVP_KEYMGMT *keymgmt; | ||||
|     void *keydata; | ||||
|     /* | ||||
|      * If any libcrypto code does anything that may modify the keydata | ||||
|      * contents, this dirty counter must be incremented. | ||||
|      */ | ||||
|     size_t dirty_cnt; | ||||
|  | ||||
|     /* | ||||
|      * To support transparent execution of operation in backends other | ||||
|      * than the "origin" key, we support transparent export/import to | ||||
|      * those providers, and maintain a cache of the imported keydata, | ||||
|      * so we don't need to redo the export/import every time we perform | ||||
|      * the same operation in that same provider. | ||||
|      */ | ||||
|     STACK_OF(OP_CACHE_ELEM) *operation_cache; | ||||
|  | ||||
|     /* | ||||
|      * We keep a copy of that "origin"'s dirty count, so we know if the | ||||
|      * operation cache needs flushing. | ||||
|      */ | ||||
|     size_t dirty_cnt_copy; | ||||
|  | ||||
|     /* Cache of key object information */ | ||||
|     struct { | ||||
|         int bits; | ||||
|         int security_bits; | ||||
|         int size; | ||||
|     } cache; | ||||
| } /* EVP_PKEY */ ; | ||||
|  | ||||
| #define EVP_PKEY_CTX_IS_SIGNATURE_OP(ctx) \ | ||||
|     ((ctx)->operation == EVP_PKEY_OP_SIGN \ | ||||
|      || (ctx)->operation == EVP_PKEY_OP_SIGNCTX \ | ||||
|      || (ctx)->operation == EVP_PKEY_OP_VERIFY \ | ||||
|      || (ctx)->operation == EVP_PKEY_OP_VERIFYCTX \ | ||||
|      || (ctx)->operation == EVP_PKEY_OP_VERIFYRECOVER) | ||||
|  | ||||
| #define EVP_PKEY_CTX_IS_DERIVE_OP(ctx) \ | ||||
|     ((ctx)->operation == EVP_PKEY_OP_DERIVE) | ||||
|  | ||||
| #define EVP_PKEY_CTX_IS_ASYM_CIPHER_OP(ctx) \ | ||||
|     ((ctx)->operation == EVP_PKEY_OP_ENCRYPT \ | ||||
|      || (ctx)->operation == EVP_PKEY_OP_DECRYPT) | ||||
|  | ||||
| #define EVP_PKEY_CTX_IS_GEN_OP(ctx) \ | ||||
|     ((ctx)->operation == EVP_PKEY_OP_PARAMGEN \ | ||||
|      || (ctx)->operation == EVP_PKEY_OP_KEYGEN) | ||||
|  | ||||
| #define EVP_PKEY_CTX_IS_FROMDATA_OP(ctx) \ | ||||
|     ((ctx)->operation == EVP_PKEY_OP_FROMDATA) | ||||
|  | ||||
| #define EVP_PKEY_CTX_IS_KEM_OP(ctx) \ | ||||
|     ((ctx)->operation == EVP_PKEY_OP_ENCAPSULATE \ | ||||
|      || (ctx)->operation == EVP_PKEY_OP_DECAPSULATE) | ||||
|  | ||||
| void openssl_add_all_ciphers_int(void); | ||||
| void openssl_add_all_digests_int(void); | ||||
| void evp_cleanup_int(void); | ||||
| void evp_app_cleanup_int(void); | ||||
| void *evp_pkey_export_to_provider(EVP_PKEY *pk, OSSL_LIB_CTX *libctx, | ||||
|                                   EVP_KEYMGMT **keymgmt, | ||||
|                                   const char *propquery); | ||||
| #ifndef FIPS_MODULE | ||||
| int evp_pkey_copy_downgraded(EVP_PKEY **dest, const EVP_PKEY *src); | ||||
| void *evp_pkey_get_legacy(EVP_PKEY *pk); | ||||
| void evp_pkey_free_legacy(EVP_PKEY *x); | ||||
| EVP_PKEY *evp_pkcs82pkey_legacy(const PKCS8_PRIV_KEY_INFO *p8inf, | ||||
|                                 OSSL_LIB_CTX *libctx, const char *propq); | ||||
| #endif | ||||
|  | ||||
| /* | ||||
|  * KEYMGMT utility functions | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  * Key import structure and helper function, to be used as an export callback | ||||
|  */ | ||||
| struct evp_keymgmt_util_try_import_data_st { | ||||
|     EVP_KEYMGMT *keymgmt; | ||||
|     void *keydata; | ||||
|  | ||||
|     int selection; | ||||
| }; | ||||
| int evp_keymgmt_util_try_import(const OSSL_PARAM params[], void *arg); | ||||
| int evp_keymgmt_util_assign_pkey(EVP_PKEY *pkey, EVP_KEYMGMT *keymgmt, | ||||
|                                  void *keydata); | ||||
| EVP_PKEY *evp_keymgmt_util_make_pkey(EVP_KEYMGMT *keymgmt, void *keydata); | ||||
|  | ||||
| int evp_keymgmt_util_export(const EVP_PKEY *pk, int selection, | ||||
|                             OSSL_CALLBACK *export_cb, void *export_cbarg); | ||||
| void *evp_keymgmt_util_export_to_provider(EVP_PKEY *pk, EVP_KEYMGMT *keymgmt, | ||||
|                                           int selection); | ||||
| OP_CACHE_ELEM *evp_keymgmt_util_find_operation_cache(EVP_PKEY *pk, | ||||
|                                                      EVP_KEYMGMT *keymgmt, | ||||
|                                                      int selection); | ||||
| int evp_keymgmt_util_clear_operation_cache(EVP_PKEY *pk); | ||||
| int evp_keymgmt_util_cache_keydata(EVP_PKEY *pk, EVP_KEYMGMT *keymgmt, | ||||
|                                    void *keydata, int selection); | ||||
| void evp_keymgmt_util_cache_keyinfo(EVP_PKEY *pk); | ||||
| void *evp_keymgmt_util_fromdata(EVP_PKEY *target, EVP_KEYMGMT *keymgmt, | ||||
|                                 int selection, const OSSL_PARAM params[]); | ||||
| int evp_keymgmt_util_has(EVP_PKEY *pk, int selection); | ||||
| int evp_keymgmt_util_match(EVP_PKEY *pk1, EVP_PKEY *pk2, int selection); | ||||
| int evp_keymgmt_util_copy(EVP_PKEY *to, EVP_PKEY *from, int selection); | ||||
| void *evp_keymgmt_util_gen(EVP_PKEY *target, EVP_KEYMGMT *keymgmt, | ||||
|                            void *genctx, OSSL_CALLBACK *cb, void *cbarg); | ||||
| int evp_keymgmt_util_get_deflt_digest_name(EVP_KEYMGMT *keymgmt, | ||||
|                                            void *keydata, | ||||
|                                            char *mdname, size_t mdname_sz); | ||||
| const char *evp_keymgmt_util_query_operation_name(EVP_KEYMGMT *keymgmt, | ||||
|                                                   int op_id); | ||||
|  | ||||
| /* | ||||
|  * KEYMGMT provider interface functions | ||||
|  */ | ||||
| void *evp_keymgmt_newdata(const EVP_KEYMGMT *keymgmt); | ||||
| void evp_keymgmt_freedata(const EVP_KEYMGMT *keymgmt, void *keyddata); | ||||
| int evp_keymgmt_get_params(const EVP_KEYMGMT *keymgmt, | ||||
|                            void *keydata, OSSL_PARAM params[]); | ||||
| int evp_keymgmt_set_params(const EVP_KEYMGMT *keymgmt, | ||||
|                            void *keydata, const OSSL_PARAM params[]); | ||||
| void *evp_keymgmt_gen_init(const EVP_KEYMGMT *keymgmt, int selection, | ||||
|                            const OSSL_PARAM params[]); | ||||
| int evp_keymgmt_gen_set_template(const EVP_KEYMGMT *keymgmt, void *genctx, | ||||
|                                  void *templ); | ||||
| int evp_keymgmt_gen_set_params(const EVP_KEYMGMT *keymgmt, void *genctx, | ||||
|                                const OSSL_PARAM params[]); | ||||
| void *evp_keymgmt_gen(const EVP_KEYMGMT *keymgmt, void *genctx, | ||||
|                       OSSL_CALLBACK *cb, void *cbarg); | ||||
| void evp_keymgmt_gen_cleanup(const EVP_KEYMGMT *keymgmt, void *genctx); | ||||
|  | ||||
| int evp_keymgmt_has_load(const EVP_KEYMGMT *keymgmt); | ||||
| void *evp_keymgmt_load(const EVP_KEYMGMT *keymgmt, | ||||
|                        const void *objref, size_t objref_sz); | ||||
|  | ||||
| int evp_keymgmt_has(const EVP_KEYMGMT *keymgmt, void *keyddata, int selection); | ||||
| int evp_keymgmt_validate(const EVP_KEYMGMT *keymgmt, void *keydata, | ||||
|                          int selection, int checktype); | ||||
| int evp_keymgmt_match(const EVP_KEYMGMT *keymgmt, | ||||
|                       const void *keydata1, const void *keydata2, | ||||
|                       int selection); | ||||
|  | ||||
| int evp_keymgmt_import(const EVP_KEYMGMT *keymgmt, void *keydata, | ||||
|                        int selection, const OSSL_PARAM params[]); | ||||
| const OSSL_PARAM *evp_keymgmt_import_types(const EVP_KEYMGMT *keymgmt, | ||||
|                                            int selection); | ||||
| int evp_keymgmt_export(const EVP_KEYMGMT *keymgmt, void *keydata, | ||||
|                        int selection, OSSL_CALLBACK *param_cb, void *cbarg); | ||||
| const OSSL_PARAM *evp_keymgmt_export_types(const EVP_KEYMGMT *keymgmt, | ||||
|                                            int selection); | ||||
| void *evp_keymgmt_dup(const EVP_KEYMGMT *keymgmt, | ||||
|                       const void *keydata_from, int selection); | ||||
| EVP_KEYMGMT *evp_keymgmt_fetch_from_prov(OSSL_PROVIDER *prov, | ||||
|                                          const char *name, | ||||
|                                          const char *properties); | ||||
|  | ||||
| /* Pulling defines out of C source files */ | ||||
|  | ||||
| # define EVP_RC4_KEY_SIZE 16 | ||||
| # ifndef TLS1_1_VERSION | ||||
| #  define TLS1_1_VERSION   0x0302 | ||||
| # endif | ||||
|  | ||||
| void evp_encode_ctx_set_flags(EVP_ENCODE_CTX *ctx, unsigned int flags); | ||||
|  | ||||
| /* EVP_ENCODE_CTX flags */ | ||||
| /* Don't generate new lines when encoding */ | ||||
| #define EVP_ENCODE_CTX_NO_NEWLINES          1 | ||||
| /* Use the SRP base64 alphabet instead of the standard one */ | ||||
| #define EVP_ENCODE_CTX_USE_SRP_ALPHABET     2 | ||||
|  | ||||
| const EVP_CIPHER *evp_get_cipherbyname_ex(OSSL_LIB_CTX *libctx, | ||||
|                                           const char *name); | ||||
| const EVP_MD *evp_get_digestbyname_ex(OSSL_LIB_CTX *libctx, | ||||
|                                       const char *name); | ||||
|  | ||||
| int ossl_pkcs5_pbkdf2_hmac_ex(const char *pass, int passlen, | ||||
|                               const unsigned char *salt, int saltlen, int iter, | ||||
|                               const EVP_MD *digest, int keylen, | ||||
|                               unsigned char *out, | ||||
|                               OSSL_LIB_CTX *libctx, const char *propq); | ||||
|  | ||||
| # ifndef FIPS_MODULE | ||||
| /* | ||||
|  * Internal helpers for stricter EVP_PKEY_CTX_{set,get}_params(). | ||||
|  * | ||||
|  * Return 1 on success, 0 or negative for errors. | ||||
|  * | ||||
|  * In particular they return -2 if any of the params is not supported. | ||||
|  * | ||||
|  * They are not available in FIPS_MODULE as they depend on | ||||
|  *      - EVP_PKEY_CTX_{get,set}_params() | ||||
|  *      - EVP_PKEY_CTX_{gettable,settable}_params() | ||||
|  * | ||||
|  */ | ||||
| int evp_pkey_ctx_set_params_strict(EVP_PKEY_CTX *ctx, OSSL_PARAM *params); | ||||
| int evp_pkey_ctx_get_params_strict(EVP_PKEY_CTX *ctx, OSSL_PARAM *params); | ||||
|  | ||||
| EVP_MD_CTX *evp_md_ctx_new_ex(EVP_PKEY *pkey, const ASN1_OCTET_STRING *id, | ||||
|                               OSSL_LIB_CTX *libctx, const char *propq); | ||||
| int evp_pkey_name2type(const char *name); | ||||
| const char *evp_pkey_type2name(int type); | ||||
|  | ||||
| int evp_pkey_ctx_use_cached_data(EVP_PKEY_CTX *ctx); | ||||
| # endif /* !defined(FIPS_MODULE) */ | ||||
|  | ||||
| int evp_method_store_cache_flush(OSSL_LIB_CTX *libctx); | ||||
| int evp_method_store_remove_all_provided(const OSSL_PROVIDER *prov); | ||||
|  | ||||
| int evp_default_properties_enable_fips_int(OSSL_LIB_CTX *libctx, int enable, | ||||
|                                            int loadconfig); | ||||
| int evp_set_default_properties_int(OSSL_LIB_CTX *libctx, const char *propq, | ||||
|                                    int loadconfig, int mirrored); | ||||
| char *evp_get_global_properties_str(OSSL_LIB_CTX *libctx, int loadconfig); | ||||
|  | ||||
| void evp_md_ctx_clear_digest(EVP_MD_CTX *ctx, int force, int keep_digest); | ||||
| /* just free the algctx if set, returns 0 on inconsistent state of ctx */ | ||||
| int evp_md_ctx_free_algctx(EVP_MD_CTX *ctx); | ||||
|  | ||||
| /* Three possible states: */ | ||||
| # define EVP_PKEY_STATE_UNKNOWN         0 | ||||
| # define EVP_PKEY_STATE_LEGACY          1 | ||||
| # define EVP_PKEY_STATE_PROVIDER        2 | ||||
| int evp_pkey_ctx_state(const EVP_PKEY_CTX *ctx); | ||||
|  | ||||
| /* These two must ONLY be called for provider side operations */ | ||||
| int evp_pkey_ctx_ctrl_to_param(EVP_PKEY_CTX *ctx, | ||||
|                                int keytype, int optype, | ||||
|                                int cmd, int p1, void *p2); | ||||
| int evp_pkey_ctx_ctrl_str_to_param(EVP_PKEY_CTX *ctx, | ||||
|                                    const char *name, const char *value); | ||||
|  | ||||
| /* These two must ONLY be called for legacy operations */ | ||||
| int evp_pkey_ctx_set_params_to_ctrl(EVP_PKEY_CTX *ctx, const OSSL_PARAM *params); | ||||
| int evp_pkey_ctx_get_params_to_ctrl(EVP_PKEY_CTX *ctx, OSSL_PARAM *params); | ||||
|  | ||||
| /* This must ONLY be called for legacy EVP_PKEYs */ | ||||
| int evp_pkey_get_params_to_ctrl(const EVP_PKEY *pkey, OSSL_PARAM *params); | ||||
|  | ||||
| /* Same as the public get0 functions but are not const */ | ||||
| # ifndef OPENSSL_NO_DEPRECATED_3_0 | ||||
| DH *evp_pkey_get0_DH_int(const EVP_PKEY *pkey); | ||||
| EC_KEY *evp_pkey_get0_EC_KEY_int(const EVP_PKEY *pkey); | ||||
| RSA *evp_pkey_get0_RSA_int(const EVP_PKEY *pkey); | ||||
| # endif | ||||
|  | ||||
| /* Get internal identification number routines */ | ||||
| int evp_asym_cipher_get_number(const EVP_ASYM_CIPHER *cipher); | ||||
| int evp_cipher_get_number(const EVP_CIPHER *cipher); | ||||
| int evp_kdf_get_number(const EVP_KDF *kdf); | ||||
| int evp_kem_get_number(const EVP_KEM *wrap); | ||||
| int evp_keyexch_get_number(const EVP_KEYEXCH *keyexch); | ||||
| int evp_keymgmt_get_number(const EVP_KEYMGMT *keymgmt); | ||||
| int evp_mac_get_number(const EVP_MAC *mac); | ||||
| int evp_md_get_number(const EVP_MD *md); | ||||
| int evp_rand_get_number(const EVP_RAND *rand); | ||||
| int evp_rand_can_seed(EVP_RAND_CTX *ctx); | ||||
| size_t evp_rand_get_seed(EVP_RAND_CTX *ctx, | ||||
|                          unsigned char **buffer, | ||||
|                          int entropy, size_t min_len, size_t max_len, | ||||
|                          int prediction_resistance, | ||||
|                          const unsigned char *adin, size_t adin_len); | ||||
| void evp_rand_clear_seed(EVP_RAND_CTX *ctx, | ||||
|                          unsigned char *buffer, size_t b_len); | ||||
| int evp_signature_get_number(const EVP_SIGNATURE *signature); | ||||
|  | ||||
| int evp_pkey_decrypt_alloc(EVP_PKEY_CTX *ctx, unsigned char **outp, | ||||
|                            size_t *outlenp, size_t expected_outlen, | ||||
|                            const unsigned char *in, size_t inlen); | ||||
|  | ||||
| #endif /* OSSL_CRYPTO_EVP_H */ | ||||
| @@ -1,27 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_EVPERR_H | ||||
| # define OSSL_CRYPTO_EVPERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| int ossl_err_load_EVP_strings(void); | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,27 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_HTTPERR_H | ||||
| # define OSSL_CRYPTO_HTTPERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| int ossl_err_load_HTTP_strings(void); | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,16 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_LHASH_H | ||||
| # define OSSL_CRYPTO_LHASH_H | ||||
| # pragma once | ||||
|  | ||||
| unsigned long ossl_lh_strcasehash(const char *); | ||||
|  | ||||
| #endif  /* OSSL_CRYPTO_LHASH_H */ | ||||
| @@ -1,284 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| /*- | ||||
|  * This is a generic 32 bit "collector" for message digest algorithms. | ||||
|  * Whenever needed it collects input character stream into chunks of | ||||
|  * 32 bit values and invokes a block function that performs actual hash | ||||
|  * calculations. | ||||
|  * | ||||
|  * Porting guide. | ||||
|  * | ||||
|  * Obligatory macros: | ||||
|  * | ||||
|  * DATA_ORDER_IS_BIG_ENDIAN or DATA_ORDER_IS_LITTLE_ENDIAN | ||||
|  *      this macro defines byte order of input stream. | ||||
|  * HASH_CBLOCK | ||||
|  *      size of a unit chunk HASH_BLOCK operates on. | ||||
|  * HASH_LONG | ||||
|  *      has to be at least 32 bit wide. | ||||
|  * HASH_CTX | ||||
|  *      context structure that at least contains following | ||||
|  *      members: | ||||
|  *              typedef struct { | ||||
|  *                      ... | ||||
|  *                      HASH_LONG       Nl,Nh; | ||||
|  *                      either { | ||||
|  *                      HASH_LONG       data[HASH_LBLOCK]; | ||||
|  *                      unsigned char   data[HASH_CBLOCK]; | ||||
|  *                      }; | ||||
|  *                      unsigned int    num; | ||||
|  *                      ... | ||||
|  *                      } HASH_CTX; | ||||
|  *      data[] vector is expected to be zeroed upon first call to | ||||
|  *      HASH_UPDATE. | ||||
|  * HASH_UPDATE | ||||
|  *      name of "Update" function, implemented here. | ||||
|  * HASH_TRANSFORM | ||||
|  *      name of "Transform" function, implemented here. | ||||
|  * HASH_FINAL | ||||
|  *      name of "Final" function, implemented here. | ||||
|  * HASH_BLOCK_DATA_ORDER | ||||
|  *      name of "block" function capable of treating *unaligned* input | ||||
|  *      message in original (data) byte order, implemented externally. | ||||
|  * HASH_MAKE_STRING | ||||
|  *      macro converting context variables to an ASCII hash string. | ||||
|  * | ||||
|  * MD5 example: | ||||
|  * | ||||
|  *      #define DATA_ORDER_IS_LITTLE_ENDIAN | ||||
|  * | ||||
|  *      #define HASH_LONG               MD5_LONG | ||||
|  *      #define HASH_CTX                MD5_CTX | ||||
|  *      #define HASH_CBLOCK             MD5_CBLOCK | ||||
|  *      #define HASH_UPDATE             MD5_Update | ||||
|  *      #define HASH_TRANSFORM          MD5_Transform | ||||
|  *      #define HASH_FINAL              MD5_Final | ||||
|  *      #define HASH_BLOCK_DATA_ORDER   md5_block_data_order | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_MD32_COMMON_H | ||||
| # define OSSL_CRYPTO_MD32_COMMON_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/crypto.h> | ||||
|  | ||||
| # if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN) | ||||
| #  error "DATA_ORDER must be defined!" | ||||
| # endif | ||||
|  | ||||
| # ifndef HASH_CBLOCK | ||||
| #  error "HASH_CBLOCK must be defined!" | ||||
| # endif | ||||
| # ifndef HASH_LONG | ||||
| #  error "HASH_LONG must be defined!" | ||||
| # endif | ||||
| # ifndef HASH_CTX | ||||
| #  error "HASH_CTX must be defined!" | ||||
| # endif | ||||
|  | ||||
| # ifndef HASH_UPDATE | ||||
| #  error "HASH_UPDATE must be defined!" | ||||
| # endif | ||||
| # ifndef HASH_TRANSFORM | ||||
| #  error "HASH_TRANSFORM must be defined!" | ||||
| # endif | ||||
| # ifndef HASH_FINAL | ||||
| #  error "HASH_FINAL must be defined!" | ||||
| # endif | ||||
|  | ||||
| # ifndef HASH_BLOCK_DATA_ORDER | ||||
| #  error "HASH_BLOCK_DATA_ORDER must be defined!" | ||||
| # endif | ||||
|  | ||||
| # define ROTATE(a,n)     (((a)<<(n))|(((a)&0xffffffff)>>(32-(n)))) | ||||
|  | ||||
| #ifndef PEDANTIC | ||||
| # if defined(__GNUC__) && __GNUC__>=2 && \ | ||||
|      !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM) | ||||
| #  if defined(__riscv_zbb) || defined(__riscv_zbkb) | ||||
| #   if __riscv_xlen == 64 | ||||
| #   undef ROTATE | ||||
| #   define ROTATE(x, n) ({ MD32_REG_T ret;            \ | ||||
|                        asm ("roriw %0, %1, %2"        \ | ||||
|                        : "=r"(ret)                    \ | ||||
|                        : "r"(x), "i"(32 - (n))); ret;}) | ||||
| #   endif | ||||
| #   if __riscv_xlen == 32 | ||||
| #   undef ROTATE | ||||
| #   define ROTATE(x, n) ({ MD32_REG_T ret;            \ | ||||
|                        asm ("rori %0, %1, %2"         \ | ||||
|                        : "=r"(ret)                    \ | ||||
|                        : "r"(x), "i"(32 - (n))); ret;}) | ||||
| #   endif | ||||
| #  endif | ||||
| # endif | ||||
| #endif | ||||
|  | ||||
| # if defined(DATA_ORDER_IS_BIG_ENDIAN) | ||||
|  | ||||
| #  define HOST_c2l(c,l)  (l =(((unsigned long)(*((c)++)))<<24),          \ | ||||
|                          l|=(((unsigned long)(*((c)++)))<<16),          \ | ||||
|                          l|=(((unsigned long)(*((c)++)))<< 8),          \ | ||||
|                          l|=(((unsigned long)(*((c)++)))    )           ) | ||||
| #  define HOST_l2c(l,c)  (*((c)++)=(unsigned char)(((l)>>24)&0xff),      \ | ||||
|                          *((c)++)=(unsigned char)(((l)>>16)&0xff),      \ | ||||
|                          *((c)++)=(unsigned char)(((l)>> 8)&0xff),      \ | ||||
|                          *((c)++)=(unsigned char)(((l)    )&0xff),      \ | ||||
|                          l) | ||||
|  | ||||
| # elif defined(DATA_ORDER_IS_LITTLE_ENDIAN) | ||||
|  | ||||
| #  define HOST_c2l(c,l)  (l =(((unsigned long)(*((c)++)))    ),          \ | ||||
|                          l|=(((unsigned long)(*((c)++)))<< 8),          \ | ||||
|                          l|=(((unsigned long)(*((c)++)))<<16),          \ | ||||
|                          l|=(((unsigned long)(*((c)++)))<<24)           ) | ||||
| #  define HOST_l2c(l,c)  (*((c)++)=(unsigned char)(((l)    )&0xff),      \ | ||||
|                          *((c)++)=(unsigned char)(((l)>> 8)&0xff),      \ | ||||
|                          *((c)++)=(unsigned char)(((l)>>16)&0xff),      \ | ||||
|                          *((c)++)=(unsigned char)(((l)>>24)&0xff),      \ | ||||
|                          l) | ||||
|  | ||||
| # endif | ||||
|  | ||||
| /* | ||||
|  * Time for some action :-) | ||||
|  */ | ||||
|  | ||||
| int HASH_UPDATE(HASH_CTX *c, const void *data_, size_t len) | ||||
| { | ||||
|     const unsigned char *data = data_; | ||||
|     unsigned char *p; | ||||
|     HASH_LONG l; | ||||
|     size_t n; | ||||
|  | ||||
|     if (len == 0) | ||||
|         return 1; | ||||
|  | ||||
|     l = (c->Nl + (((HASH_LONG) len) << 3)) & 0xffffffffUL; | ||||
|     if (l < c->Nl)              /* overflow */ | ||||
|         c->Nh++; | ||||
|     c->Nh += (HASH_LONG) (len >> 29); /* might cause compiler warning on | ||||
|                                        * 16-bit */ | ||||
|     c->Nl = l; | ||||
|  | ||||
|     n = c->num; | ||||
|     if (n != 0) { | ||||
|         p = (unsigned char *)c->data; | ||||
|  | ||||
|         if (len >= HASH_CBLOCK || len + n >= HASH_CBLOCK) { | ||||
|             memcpy(p + n, data, HASH_CBLOCK - n); | ||||
|             HASH_BLOCK_DATA_ORDER(c, p, 1); | ||||
|             n = HASH_CBLOCK - n; | ||||
|             data += n; | ||||
|             len -= n; | ||||
|             c->num = 0; | ||||
|             /* | ||||
|              * We use memset rather than OPENSSL_cleanse() here deliberately. | ||||
|              * Using OPENSSL_cleanse() here could be a performance issue. It | ||||
|              * will get properly cleansed on finalisation so this isn't a | ||||
|              * security problem. | ||||
|              */ | ||||
|             memset(p, 0, HASH_CBLOCK); /* keep it zeroed */ | ||||
|         } else { | ||||
|             memcpy(p + n, data, len); | ||||
|             c->num += (unsigned int)len; | ||||
|             return 1; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     n = len / HASH_CBLOCK; | ||||
|     if (n > 0) { | ||||
|         HASH_BLOCK_DATA_ORDER(c, data, n); | ||||
|         n *= HASH_CBLOCK; | ||||
|         data += n; | ||||
|         len -= n; | ||||
|     } | ||||
|  | ||||
|     if (len != 0) { | ||||
|         p = (unsigned char *)c->data; | ||||
|         c->num = (unsigned int)len; | ||||
|         memcpy(p, data, len); | ||||
|     } | ||||
|     return 1; | ||||
| } | ||||
|  | ||||
| void HASH_TRANSFORM(HASH_CTX *c, const unsigned char *data) | ||||
| { | ||||
|     HASH_BLOCK_DATA_ORDER(c, data, 1); | ||||
| } | ||||
|  | ||||
| int HASH_FINAL(unsigned char *md, HASH_CTX *c) | ||||
| { | ||||
|     unsigned char *p = (unsigned char *)c->data; | ||||
|     size_t n = c->num; | ||||
|  | ||||
|     p[n] = 0x80;                /* there is always room for one */ | ||||
|     n++; | ||||
|  | ||||
|     if (n > (HASH_CBLOCK - 8)) { | ||||
|         memset(p + n, 0, HASH_CBLOCK - n); | ||||
|         n = 0; | ||||
|         HASH_BLOCK_DATA_ORDER(c, p, 1); | ||||
|     } | ||||
|     memset(p + n, 0, HASH_CBLOCK - 8 - n); | ||||
|  | ||||
|     p += HASH_CBLOCK - 8; | ||||
| # if   defined(DATA_ORDER_IS_BIG_ENDIAN) | ||||
|     (void)HOST_l2c(c->Nh, p); | ||||
|     (void)HOST_l2c(c->Nl, p); | ||||
| # elif defined(DATA_ORDER_IS_LITTLE_ENDIAN) | ||||
|     (void)HOST_l2c(c->Nl, p); | ||||
|     (void)HOST_l2c(c->Nh, p); | ||||
| # endif | ||||
|     p -= HASH_CBLOCK; | ||||
|     HASH_BLOCK_DATA_ORDER(c, p, 1); | ||||
|     c->num = 0; | ||||
|     OPENSSL_cleanse(p, HASH_CBLOCK); | ||||
|  | ||||
| # ifndef HASH_MAKE_STRING | ||||
| #  error "HASH_MAKE_STRING must be defined!" | ||||
| # else | ||||
|     HASH_MAKE_STRING(c, md); | ||||
| # endif | ||||
|  | ||||
|     return 1; | ||||
| } | ||||
|  | ||||
| # ifndef MD32_REG_T | ||||
| #  if defined(__alpha) || defined(__sparcv9) || defined(__mips) | ||||
| #   define MD32_REG_T long | ||||
| /* | ||||
|  * This comment was originally written for MD5, which is why it | ||||
|  * discusses A-D. But it basically applies to all 32-bit digests, | ||||
|  * which is why it was moved to common header file. | ||||
|  * | ||||
|  * In case you wonder why A-D are declared as long and not | ||||
|  * as MD5_LONG. Doing so results in slight performance | ||||
|  * boost on LP64 architectures. The catch is we don't | ||||
|  * really care if 32 MSBs of a 64-bit register get polluted | ||||
|  * with eventual overflows as we *save* only 32 LSBs in | ||||
|  * *either* case. Now declaring 'em long excuses the compiler | ||||
|  * from keeping 32 MSBs zeroed resulting in 13% performance | ||||
|  * improvement under SPARC Solaris7/64 and 5% under AlphaLinux. | ||||
|  * Well, to be honest it should say that this *prevents* | ||||
|  * performance degradation. | ||||
|  */ | ||||
| #  else | ||||
| /* | ||||
|  * Above is not absolute and there are LP64 compilers that | ||||
|  * generate better code if MD32_REG_T is defined int. The above | ||||
|  * pre-processor condition reflects the circumstances under which | ||||
|  * the conclusion was made and is subject to further extension. | ||||
|  */ | ||||
| #   define MD32_REG_T int | ||||
| #  endif | ||||
| # endif | ||||
|  | ||||
| #endif | ||||
| @@ -1,236 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2010-2022 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| /* This header can move into provider when legacy support is removed */ | ||||
| #include <openssl/modes.h> | ||||
|  | ||||
| #if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) | ||||
| typedef __int64 i64; | ||||
| typedef unsigned __int64 u64; | ||||
| # define U64(C) C##UI64 | ||||
| #elif defined(__arch64__) | ||||
| typedef long i64; | ||||
| typedef unsigned long u64; | ||||
| # define U64(C) C##UL | ||||
| #else | ||||
| typedef long long i64; | ||||
| typedef unsigned long long u64; | ||||
| # define U64(C) C##ULL | ||||
| #endif | ||||
|  | ||||
| typedef unsigned int u32; | ||||
| typedef unsigned char u8; | ||||
|  | ||||
| #define STRICT_ALIGNMENT 1 | ||||
| #ifndef PEDANTIC | ||||
| # if defined(__i386)    || defined(__i386__)    || \ | ||||
|      defined(__x86_64)  || defined(__x86_64__)  || \ | ||||
|      defined(_M_IX86)   || defined(_M_AMD64)    || defined(_M_X64) || \ | ||||
|      defined(__aarch64__)                       || \ | ||||
|      defined(__s390__)  || defined(__s390x__) | ||||
| #  undef STRICT_ALIGNMENT | ||||
| # endif | ||||
| #endif | ||||
|  | ||||
| #if !defined(PEDANTIC) && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM) | ||||
| # if defined(__GNUC__) && __GNUC__>=2 | ||||
| #  if defined(__x86_64) || defined(__x86_64__) | ||||
| #   define BSWAP8(x) ({ u64 ret_=(x);                   \ | ||||
|                         asm ("bswapq %0"                \ | ||||
|                         : "+r"(ret_));   ret_;          }) | ||||
| #   define BSWAP4(x) ({ u32 ret_=(x);                   \ | ||||
|                         asm ("bswapl %0"                \ | ||||
|                         : "+r"(ret_));   ret_;          }) | ||||
| #  elif (defined(__i386) || defined(__i386__)) && !defined(I386_ONLY) | ||||
| #   define BSWAP8(x) ({ u32 lo_=(u64)(x)>>32,hi_=(x);   \ | ||||
|                         asm ("bswapl %0; bswapl %1"     \ | ||||
|                         : "+r"(hi_),"+r"(lo_));         \ | ||||
|                         (u64)hi_<<32|lo_;               }) | ||||
| #   define BSWAP4(x) ({ u32 ret_=(x);                   \ | ||||
|                         asm ("bswapl %0"                \ | ||||
|                         : "+r"(ret_));   ret_;          }) | ||||
| #  elif defined(__aarch64__) | ||||
| #   if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && \ | ||||
|        __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__ | ||||
| #    define BSWAP8(x) ({ u64 ret_;                       \ | ||||
|                         asm ("rev %0,%1"                \ | ||||
|                         : "=r"(ret_) : "r"(x)); ret_;   }) | ||||
| #    define BSWAP4(x) ({ u32 ret_;                       \ | ||||
|                         asm ("rev %w0,%w1"              \ | ||||
|                         : "=r"(ret_) : "r"(x)); ret_;   }) | ||||
| #   endif | ||||
| #  elif (defined(__arm__) || defined(__arm)) && !defined(STRICT_ALIGNMENT) | ||||
| #   define BSWAP8(x) ({ u32 lo_=(u64)(x)>>32,hi_=(x);   \ | ||||
|                         asm ("rev %0,%0; rev %1,%1"     \ | ||||
|                         : "+r"(hi_),"+r"(lo_));         \ | ||||
|                         (u64)hi_<<32|lo_;               }) | ||||
| #   define BSWAP4(x) ({ u32 ret_;                       \ | ||||
|                         asm ("rev %0,%1"                \ | ||||
|                         : "=r"(ret_) : "r"((u32)(x)));  \ | ||||
|                         ret_;                           }) | ||||
| #  elif (defined(__riscv_zbb) || defined(__riscv_zbkb)) && __riscv_xlen == 64 | ||||
| #   define BSWAP8(x) ({ u64 ret_=(x);                   \ | ||||
|                         asm ("rev8 %0,%0"               \ | ||||
|                         : "+r"(ret_));   ret_;          }) | ||||
| #   define BSWAP4(x) ({ u32 ret_=(x);                   \ | ||||
|                         asm ("rev8 %0,%0; srli %0,%0,32"\ | ||||
|                         : "+&r"(ret_));  ret_;          }) | ||||
| #  endif | ||||
| # elif defined(_MSC_VER) | ||||
| #  if _MSC_VER>=1300 | ||||
| #   include <stdlib.h> | ||||
| #   pragma intrinsic(_byteswap_uint64,_byteswap_ulong) | ||||
| #   define BSWAP8(x)    _byteswap_uint64((u64)(x)) | ||||
| #   define BSWAP4(x)    _byteswap_ulong((u32)(x)) | ||||
| #  elif defined(_M_IX86) | ||||
| __inline u32 _bswap4(u32 val) | ||||
| { | ||||
| _asm mov eax, val _asm bswap eax} | ||||
| #   define BSWAP4(x)    _bswap4(x) | ||||
| #  endif | ||||
| # endif | ||||
| #endif | ||||
| #if defined(BSWAP4) && !defined(STRICT_ALIGNMENT) | ||||
| # define GETU32(p)       BSWAP4(*(const u32 *)(p)) | ||||
| # define PUTU32(p,v)     *(u32 *)(p) = BSWAP4(v) | ||||
| #else | ||||
| # define GETU32(p)       ((u32)(p)[0]<<24|(u32)(p)[1]<<16|(u32)(p)[2]<<8|(u32)(p)[3]) | ||||
| # define PUTU32(p,v)     ((p)[0]=(u8)((v)>>24),(p)[1]=(u8)((v)>>16),(p)[2]=(u8)((v)>>8),(p)[3]=(u8)(v)) | ||||
| #endif | ||||
| /*- GCM definitions */ typedef struct { | ||||
|     u64 hi, lo; | ||||
| } u128; | ||||
|  | ||||
| typedef void (*gcm_init_fn)(u128 Htable[16], const u64 H[2]); | ||||
| typedef void (*gcm_ghash_fn)(u64 Xi[2], const u128 Htable[16], const u8 *inp, size_t len); | ||||
| typedef void (*gcm_gmult_fn)(u64 Xi[2], const u128 Htable[16]); | ||||
| struct gcm_funcs_st { | ||||
|     gcm_init_fn ginit; | ||||
|     gcm_ghash_fn ghash; | ||||
|     gcm_gmult_fn gmult; | ||||
| }; | ||||
|  | ||||
| struct gcm128_context { | ||||
|     /* Following 6 names follow names in GCM specification */ | ||||
|     union { | ||||
|         u64 u[2]; | ||||
|         u32 d[4]; | ||||
|         u8 c[16]; | ||||
|         size_t t[16 / sizeof(size_t)]; | ||||
|     } Yi, EKi, EK0, len, Xi, H; | ||||
|     /* | ||||
|      * Relative position of Yi, EKi, EK0, len, Xi, H and pre-computed Htable is | ||||
|      * used in some assembler modules, i.e. don't change the order! | ||||
|      */ | ||||
|     u128 Htable[16]; | ||||
|     struct gcm_funcs_st funcs; | ||||
|     unsigned int mres, ares; | ||||
|     block128_f block; | ||||
|     void *key; | ||||
| #if !defined(OPENSSL_SMALL_FOOTPRINT) | ||||
|     unsigned char Xn[48]; | ||||
| #endif | ||||
| }; | ||||
|  | ||||
| /* GHASH functions */ | ||||
| void ossl_gcm_init_4bit(u128 Htable[16], const u64 H[2]); | ||||
| void ossl_gcm_ghash_4bit(u64 Xi[2], const u128 Htable[16], | ||||
|                          const u8 *inp, size_t len); | ||||
| void ossl_gcm_gmult_4bit(u64 Xi[2], const u128 Htable[16]); | ||||
|  | ||||
| /* | ||||
|  * The maximum permitted number of cipher blocks per data unit in XTS mode. | ||||
|  * Reference IEEE Std 1619-2018. | ||||
|  */ | ||||
| #define XTS_MAX_BLOCKS_PER_DATA_UNIT            (1<<20) | ||||
|  | ||||
| struct xts128_context { | ||||
|     void *key1, *key2; | ||||
|     block128_f block1, block2; | ||||
| }; | ||||
|  | ||||
| /* XTS mode for SM4 algorithm specified by GB/T 17964-2021 */ | ||||
| int ossl_crypto_xts128gb_encrypt(const XTS128_CONTEXT *ctx, | ||||
|                                  const unsigned char iv[16], | ||||
|                                  const unsigned char *inp, unsigned char *out, | ||||
|                                  size_t len, int enc); | ||||
|  | ||||
| struct ccm128_context { | ||||
|     union { | ||||
|         u64 u[2]; | ||||
|         u8 c[16]; | ||||
|     } nonce, cmac; | ||||
|     u64 blocks; | ||||
|     block128_f block; | ||||
|     void *key; | ||||
| }; | ||||
|  | ||||
| #ifndef OPENSSL_NO_OCB | ||||
|  | ||||
| typedef union { | ||||
|     u64 a[2]; | ||||
|     unsigned char c[16]; | ||||
| } OCB_BLOCK; | ||||
| # define ocb_block16_xor(in1,in2,out) \ | ||||
|     ( (out)->a[0]=(in1)->a[0]^(in2)->a[0], \ | ||||
|       (out)->a[1]=(in1)->a[1]^(in2)->a[1] ) | ||||
| # if STRICT_ALIGNMENT | ||||
| #  define ocb_block16_xor_misaligned(in1,in2,out) \ | ||||
|     ocb_block_xor((in1)->c,(in2)->c,16,(out)->c) | ||||
| # else | ||||
| #  define ocb_block16_xor_misaligned ocb_block16_xor | ||||
| # endif | ||||
|  | ||||
| struct ocb128_context { | ||||
|     /* Need both encrypt and decrypt key schedules for decryption */ | ||||
|     block128_f encrypt; | ||||
|     block128_f decrypt; | ||||
|     void *keyenc; | ||||
|     void *keydec; | ||||
|     ocb128_f stream;    /* direction dependent */ | ||||
|     /* Key dependent variables. Can be reused if key remains the same */ | ||||
|     size_t l_index; | ||||
|     size_t max_l_index; | ||||
|     OCB_BLOCK l_star; | ||||
|     OCB_BLOCK l_dollar; | ||||
|     OCB_BLOCK *l; | ||||
|     /* Must be reset for each session */ | ||||
|     struct { | ||||
|         u64 blocks_hashed; | ||||
|         u64 blocks_processed; | ||||
|         OCB_BLOCK offset_aad; | ||||
|         OCB_BLOCK sum; | ||||
|         OCB_BLOCK offset; | ||||
|         OCB_BLOCK checksum; | ||||
|     } sess; | ||||
| }; | ||||
| #endif                          /* OPENSSL_NO_OCB */ | ||||
|  | ||||
| #ifndef OPENSSL_NO_SIV | ||||
|  | ||||
| #define SIV_LEN 16 | ||||
|  | ||||
| typedef union siv_block_u { | ||||
|     uint64_t word[SIV_LEN/sizeof(uint64_t)]; | ||||
|     unsigned char byte[SIV_LEN]; | ||||
| } SIV_BLOCK; | ||||
|  | ||||
| struct siv128_context { | ||||
|     /* d stores intermediate results of S2V; it corresponds to D from the | ||||
|        pseudocode in section 2.4 of RFC 5297. */ | ||||
|     SIV_BLOCK d; | ||||
|     SIV_BLOCK tag; | ||||
|     EVP_CIPHER_CTX *cipher_ctx; | ||||
|     EVP_MAC *mac; | ||||
|     EVP_MAC_CTX *mac_ctx_init; | ||||
|     int final_ret; | ||||
|     int crypto_ok; | ||||
| }; | ||||
|  | ||||
| #endif /* OPENSSL_NO_SIV */ | ||||
| @@ -1,12 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #include <openssl/objects.h> | ||||
|  | ||||
| void ossl_obj_cleanup_int(void); | ||||
| @@ -1,27 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_OBJECTSERR_H | ||||
| # define OSSL_CRYPTO_OBJECTSERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| int ossl_err_load_OBJ_strings(void); | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,30 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_OCSPERR_H | ||||
| # define OSSL_CRYPTO_OCSPERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| # ifndef OPENSSL_NO_OCSP | ||||
|  | ||||
| int ossl_err_load_OCSP_strings(void); | ||||
| # endif | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,51 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2018-2022 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_INTERNAL_PEM_H | ||||
| # define OSSL_INTERNAL_PEM_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/pem.h> | ||||
| # include "crypto/types.h" | ||||
|  | ||||
| /* Found in crypto/pem/pvkfmt.c */ | ||||
|  | ||||
| /* Maximum length of a blob after header */ | ||||
| # define BLOB_MAX_LENGTH          102400 | ||||
|  | ||||
| int ossl_do_blob_header(const unsigned char **in, unsigned int length, | ||||
|                         unsigned int *pmagic, unsigned int *pbitlen, | ||||
|                         int *pisdss, int *pispub); | ||||
| unsigned int ossl_blob_length(unsigned bitlen, int isdss, int ispub); | ||||
| int ossl_do_PVK_header(const unsigned char **in, unsigned int length, | ||||
|                        int skip_magic, | ||||
|                        unsigned int *psaltlen, unsigned int *pkeylen); | ||||
| # ifndef OPENSSL_NO_DEPRECATED_3_0 | ||||
| #  ifndef OPENSSL_NO_DSA | ||||
| DSA *ossl_b2i_DSA_after_header(const unsigned char **in, unsigned int bitlen, | ||||
|                                int ispub); | ||||
| #  endif | ||||
| RSA *ossl_b2i_RSA_after_header(const unsigned char **in, unsigned int bitlen, | ||||
|                                int ispub); | ||||
| # endif | ||||
| EVP_PKEY *ossl_b2i(const unsigned char **in, unsigned int length, int *ispub); | ||||
| EVP_PKEY *ossl_b2i_bio(BIO *in, int *ispub); | ||||
|  | ||||
| # ifndef OPENSSL_NO_DEPRECATED_3_0 | ||||
| #  ifndef OPENSSL_NO_DSA | ||||
| DSA *b2i_DSA_PVK_bio(BIO *in, pem_password_cb *cb, void *u); | ||||
| DSA *b2i_DSA_PVK_bio_ex(BIO *in, pem_password_cb *cb, void *u, | ||||
|                         OSSL_LIB_CTX *libctx, const char *propq); | ||||
| #  endif | ||||
| RSA *b2i_RSA_PVK_bio(BIO *in, pem_password_cb *cb, void *u); | ||||
| RSA *b2i_RSA_PVK_bio_ex(BIO *in, pem_password_cb *cb, void *u, | ||||
|                         OSSL_LIB_CTX *libctx, const char *propq); | ||||
| # endif | ||||
|  | ||||
| #endif | ||||
| @@ -1,27 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_PEMERR_H | ||||
| # define OSSL_CRYPTO_PEMERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| int ossl_err_load_PEM_strings(void); | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,27 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_PKCS12ERR_H | ||||
| # define OSSL_CRYPTO_PKCS12ERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| int ossl_err_load_PKCS12_strings(void); | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,19 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_PKCS7_H | ||||
| # define OSSL_CRYPTO_PKCS7_H | ||||
| # pragma once | ||||
|  | ||||
| void ossl_pkcs7_resolve_libctx(PKCS7 *p7); | ||||
|  | ||||
| void ossl_pkcs7_set0_libctx(PKCS7 *p7, OSSL_LIB_CTX *ctx); | ||||
| int ossl_pkcs7_set1_propq(PKCS7 *p7, const char *propq); | ||||
|  | ||||
| #endif | ||||
| @@ -1,27 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_PKCS7ERR_H | ||||
| # define OSSL_CRYPTO_PKCS7ERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| int ossl_err_load_PKCS7_strings(void); | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,46 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_POLY1305_H | ||||
| # define OSSL_CRYPTO_POLY1305_H | ||||
| # pragma once | ||||
|  | ||||
| #include <stddef.h> | ||||
|  | ||||
| #define POLY1305_BLOCK_SIZE  16 | ||||
| #define POLY1305_DIGEST_SIZE 16 | ||||
| #define POLY1305_KEY_SIZE    32 | ||||
|  | ||||
| typedef struct poly1305_context POLY1305; | ||||
|  | ||||
| typedef void (*poly1305_blocks_f) (void *ctx, const unsigned char *inp, | ||||
|                                    size_t len, unsigned int padbit); | ||||
| typedef void (*poly1305_emit_f) (void *ctx, unsigned char mac[16], | ||||
|                                  const unsigned int nonce[4]); | ||||
|  | ||||
| struct poly1305_context { | ||||
|     double opaque[24];  /* large enough to hold internal state, declared | ||||
|                          * 'double' to ensure at least 64-bit invariant | ||||
|                          * alignment across all platforms and | ||||
|                          * configurations */ | ||||
|     unsigned int nonce[4]; | ||||
|     unsigned char data[POLY1305_BLOCK_SIZE]; | ||||
|     size_t num; | ||||
|     struct { | ||||
|         poly1305_blocks_f blocks; | ||||
|         poly1305_emit_f emit; | ||||
|     } func; | ||||
| }; | ||||
|  | ||||
| size_t Poly1305_ctx_size(void); | ||||
| void Poly1305_Init(POLY1305 *ctx, const unsigned char key[32]); | ||||
| void Poly1305_Update(POLY1305 *ctx, const unsigned char *inp, size_t len); | ||||
| void Poly1305_Final(POLY1305 *ctx, unsigned char mac[16]); | ||||
|  | ||||
| #endif /* OSSL_CRYPTO_POLY1305_H */ | ||||
| @@ -1,29 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2014-2022 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_PPC_ARCH_H | ||||
| # define OSSL_CRYPTO_PPC_ARCH_H | ||||
|  | ||||
| extern unsigned int OPENSSL_ppccap_P; | ||||
|  | ||||
| /* | ||||
|  * Flags' usage can appear ambiguous, because they are set rather | ||||
|  * to reflect OpenSSL performance preferences than actual processor | ||||
|  * capabilities. | ||||
|  */ | ||||
| # define PPC_FPU64       (1<<0) | ||||
| # define PPC_ALTIVEC     (1<<1) | ||||
| # define PPC_CRYPTO207   (1<<2) | ||||
| # define PPC_FPU         (1<<3) | ||||
| # define PPC_MADD300     (1<<4) | ||||
| # define PPC_MFTB        (1<<5) | ||||
| # define PPC_MFSPR268    (1<<6) | ||||
| # define PPC_BRD31       (1<<7) | ||||
|  | ||||
| #endif | ||||
| @@ -1,25 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_PUNYCODE_H | ||||
| # define OSSL_CRYPTO_PUNYCODE_H | ||||
| # pragma once | ||||
|  | ||||
| # include <stddef.h>     /* for size_t */ | ||||
|  | ||||
| int ossl_punycode_decode ( | ||||
|     const char *pEncoded, | ||||
|     const size_t enc_len, | ||||
|     unsigned int *pDecoded, | ||||
|     unsigned int *pout_length | ||||
| ); | ||||
|  | ||||
| int ossl_a2ulabel(const char *in, char *out, size_t outlen); | ||||
|  | ||||
| #endif | ||||
| @@ -1,154 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2016-2023 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  * Licensed under the Apache License 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  * or in the file LICENSE in the source distribution. | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_RAND_H | ||||
| # define OSSL_CRYPTO_RAND_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/rand.h> | ||||
| # include "crypto/rand_pool.h" | ||||
|  | ||||
| # if defined(__APPLE__) && !defined(OPENSSL_NO_APPLE_CRYPTO_RANDOM) | ||||
| #  include <Availability.h> | ||||
| #  if (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200) || \ | ||||
|      (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) | ||||
| #   define OPENSSL_APPLE_CRYPTO_RANDOM 1 | ||||
| #   include <CommonCrypto/CommonCryptoError.h> | ||||
| #   include <CommonCrypto/CommonRandom.h> | ||||
| #  endif | ||||
| # endif | ||||
|  | ||||
| /* | ||||
|  * Defines related to seed sources | ||||
|  */ | ||||
| #ifndef DEVRANDOM | ||||
| /* | ||||
|  * set this to a comma-separated list of 'random' device files to try out. By | ||||
|  * default, we will try to read at least one of these files | ||||
|  */ | ||||
| # define DEVRANDOM "/dev/urandom", "/dev/random", "/dev/hwrng", "/dev/srandom" | ||||
| # if defined(__linux) && !defined(__ANDROID__) | ||||
| #  ifndef DEVRANDOM_WAIT | ||||
| #   define DEVRANDOM_WAIT   "/dev/random" | ||||
| #  endif | ||||
| /* | ||||
|  * Linux kernels 4.8 and later changes how their random device works and there | ||||
|  * is no reliable way to tell that /dev/urandom has been seeded -- getentropy(2) | ||||
|  * should be used instead. | ||||
|  */ | ||||
| #  ifndef DEVRANDOM_SAFE_KERNEL | ||||
| #   define DEVRANDOM_SAFE_KERNEL        4, 8 | ||||
| #  endif | ||||
| /* | ||||
|  * Some operating systems do not permit select(2) on their random devices, | ||||
|  * defining this to zero will force the use of read(2) to extract one byte | ||||
|  * from /dev/random. | ||||
|  */ | ||||
| #  ifndef DEVRANDM_WAIT_USE_SELECT | ||||
| #   define DEVRANDM_WAIT_USE_SELECT     1 | ||||
| #  endif | ||||
| /* | ||||
|  * Define the shared memory identifier used to indicate if the operating | ||||
|  * system has properly seeded the DEVRANDOM source. | ||||
|  */ | ||||
| #  ifndef OPENSSL_RAND_SEED_DEVRANDOM_SHM_ID | ||||
| #   define OPENSSL_RAND_SEED_DEVRANDOM_SHM_ID 114 | ||||
| #  endif | ||||
|  | ||||
| # endif | ||||
| #endif | ||||
|  | ||||
| #if !defined(OPENSSL_NO_EGD) && !defined(DEVRANDOM_EGD) | ||||
| /* | ||||
|  * set this to a comma-separated list of 'egd' sockets to try out. These | ||||
|  * sockets will be tried in the order listed in case accessing the device | ||||
|  * files listed in DEVRANDOM did not return enough randomness. | ||||
|  */ | ||||
| # define DEVRANDOM_EGD "/var/run/egd-pool", "/dev/egd-pool", "/etc/egd-pool", "/etc/entropy" | ||||
| #endif | ||||
|  | ||||
| void ossl_rand_cleanup_int(void); | ||||
|  | ||||
| /* | ||||
|  * Initialise the random pool reseeding sources. | ||||
|  * | ||||
|  * Returns 1 on success and 0 on failure. | ||||
|  */ | ||||
| int ossl_rand_pool_init(void); | ||||
|  | ||||
| /* | ||||
|  * Finalise the random pool reseeding sources. | ||||
|  */ | ||||
| void ossl_rand_pool_cleanup(void); | ||||
|  | ||||
| /* | ||||
|  * Control the random pool use of open file descriptors. | ||||
|  */ | ||||
| void ossl_rand_pool_keep_random_devices_open(int keep); | ||||
|  | ||||
| /* | ||||
|  * Configuration | ||||
|  */ | ||||
| void ossl_random_add_conf_module(void); | ||||
|  | ||||
| /* | ||||
|  * Get and cleanup random seed material. | ||||
|  */ | ||||
| size_t ossl_rand_get_entropy(OSSL_LIB_CTX *ctx, | ||||
|                              unsigned char **pout, int entropy, | ||||
|                              size_t min_len, size_t max_len); | ||||
| size_t ossl_rand_get_user_entropy(OSSL_LIB_CTX *ctx, | ||||
|                                   unsigned char **pout, int entropy, | ||||
|                                   size_t min_len, size_t max_len); | ||||
| void ossl_rand_cleanup_entropy(OSSL_LIB_CTX *ctx, | ||||
|                                unsigned char *buf, size_t len); | ||||
| void ossl_rand_cleanup_user_entropy(OSSL_LIB_CTX *ctx, | ||||
|                                     unsigned char *buf, size_t len); | ||||
| size_t ossl_rand_get_nonce(OSSL_LIB_CTX *ctx, | ||||
|                            unsigned char **pout, size_t min_len, size_t max_len, | ||||
|                            const void *salt, size_t salt_len); | ||||
| size_t ossl_rand_get_user_nonce(OSSL_LIB_CTX *ctx, unsigned char **pout, | ||||
|                                 size_t min_len, size_t max_len, | ||||
|                                 const void *salt, size_t salt_len); | ||||
| void ossl_rand_cleanup_nonce(OSSL_LIB_CTX *ctx, | ||||
|                              unsigned char *buf, size_t len); | ||||
| void ossl_rand_cleanup_user_nonce(OSSL_LIB_CTX *ctx, | ||||
|                                   unsigned char *buf, size_t len); | ||||
|  | ||||
| /* | ||||
|  * Get seeding material from the operating system sources. | ||||
|  */ | ||||
| size_t ossl_pool_acquire_entropy(RAND_POOL *pool); | ||||
| int ossl_pool_add_nonce_data(RAND_POOL *pool); | ||||
|  | ||||
| # ifdef FIPS_MODULE | ||||
| EVP_RAND_CTX *ossl_rand_get0_private_noncreating(OSSL_LIB_CTX *ctx); | ||||
| # else | ||||
| EVP_RAND_CTX *ossl_rand_get0_seed_noncreating(OSSL_LIB_CTX *ctx); | ||||
| # endif | ||||
|  | ||||
| /* Generate a uniformly distributed random integer in the interval [0, upper) */ | ||||
| uint32_t ossl_rand_uniform_uint32(OSSL_LIB_CTX *ctx, uint32_t upper, int *err); | ||||
|  | ||||
| /* | ||||
|  * Generate a uniformly distributed random integer in the interval | ||||
|  * [lower, upper). | ||||
|  */ | ||||
| uint32_t ossl_rand_range_uint32(OSSL_LIB_CTX *ctx, uint32_t lower, uint32_t upper, | ||||
|                                 int *err); | ||||
|  | ||||
| #endif | ||||
| @@ -1,109 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_PROVIDER_RAND_POOL_H | ||||
| # define OSSL_PROVIDER_RAND_POOL_H | ||||
| # pragma once | ||||
|  | ||||
| # include <stdio.h> | ||||
| # include <openssl/rand.h> | ||||
|  | ||||
| /* | ||||
|  * Maximum allocation size for RANDOM_POOL buffers | ||||
|  * | ||||
|  * The max_len value for the buffer provided to the rand_drbg_get_entropy() | ||||
|  * callback is currently 2^31 bytes (2 gigabytes), if a derivation function | ||||
|  * is used. Since this is much too large to be allocated, the ossl_rand_pool_new() | ||||
|  * function chooses more modest values as default pool length, bounded | ||||
|  * by RAND_POOL_MIN_LENGTH and RAND_POOL_MAX_LENGTH | ||||
|  * | ||||
|  * The choice of the RAND_POOL_FACTOR is large enough such that the | ||||
|  * RAND_POOL can store a random input which has a lousy entropy rate of | ||||
|  * 8/256 (= 0.03125) bits per byte. This input will be sent through the | ||||
|  * derivation function which 'compresses' the low quality input into a | ||||
|  * high quality output. | ||||
|  * | ||||
|  * The factor 1.5 below is the pessimistic estimate for the extra amount | ||||
|  * of entropy required when no get_nonce() callback is defined. | ||||
|  */ | ||||
| # define RAND_POOL_FACTOR        256 | ||||
| # define RAND_POOL_MAX_LENGTH    (RAND_POOL_FACTOR * \ | ||||
|                                   3 * (RAND_DRBG_STRENGTH / 16)) | ||||
| /* | ||||
|  *                             = (RAND_POOL_FACTOR * \ | ||||
|  *                                1.5 * (RAND_DRBG_STRENGTH / 8)) | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  * Initial allocation minimum. | ||||
|  * | ||||
|  * There is a distinction between the secure and normal allocation minimums. | ||||
|  * Ideally, the secure allocation size should be a power of two.  The normal | ||||
|  * allocation size doesn't have any such restriction. | ||||
|  * | ||||
|  * The secure value is based on 128 bits of secure material, which is 16 bytes. | ||||
|  * Typically, the DRBGs will set a minimum larger than this so optimal | ||||
|  * allocation ought to take place (for full quality seed material). | ||||
|  * | ||||
|  * The normal value has been chosen by noticing that the rand_drbg_get_nonce | ||||
|  * function is usually the largest of the built in allocation (twenty four | ||||
|  * bytes and then appending another sixteen bytes).  This means the buffer ends | ||||
|  * with 40 bytes.  The value of forty eight is comfortably above this which | ||||
|  * allows some slack in the platform specific values used. | ||||
|  */ | ||||
| # define RAND_POOL_MIN_ALLOCATION(secure) ((secure) ? 16 : 48) | ||||
|  | ||||
| /* | ||||
|  * The 'random pool' acts as a dumb container for collecting random | ||||
|  * input from various entropy sources. It is the callers duty to 1) initialize | ||||
|  * the random pool, 2) pass it to the polling callbacks, 3) seed the RNG, and | ||||
|  * 4) cleanup the random pool again. | ||||
|  * | ||||
|  * The random pool contains no locking mechanism because its scope and | ||||
|  * lifetime is intended to be restricted to a single stack frame. | ||||
|  */ | ||||
| typedef struct rand_pool_st { | ||||
|     unsigned char *buffer;  /* points to the beginning of the random pool */ | ||||
|     size_t len; /* current number of random bytes contained in the pool */ | ||||
|  | ||||
|     int attached;  /* true pool was attached to existing buffer */ | ||||
|     int secure;    /* 1: allocated on the secure heap, 0: otherwise */ | ||||
|  | ||||
|     size_t min_len; /* minimum number of random bytes requested */ | ||||
|     size_t max_len; /* maximum number of random bytes (allocated buffer size) */ | ||||
|     size_t alloc_len; /* current number of bytes allocated */ | ||||
|     size_t entropy; /* current entropy count in bits */ | ||||
|     size_t entropy_requested; /* requested entropy count in bits */ | ||||
| } RAND_POOL; | ||||
|  | ||||
| RAND_POOL *ossl_rand_pool_new(int entropy_requested, int secure, | ||||
|                               size_t min_len, size_t max_len); | ||||
| RAND_POOL *ossl_rand_pool_attach(const unsigned char *buffer, size_t len, | ||||
|                                  size_t entropy); | ||||
| void ossl_rand_pool_free(RAND_POOL *pool); | ||||
|  | ||||
| const unsigned char *ossl_rand_pool_buffer(RAND_POOL *pool); | ||||
| unsigned char *ossl_rand_pool_detach(RAND_POOL *pool); | ||||
| void ossl_rand_pool_reattach(RAND_POOL *pool, unsigned char *buffer); | ||||
|  | ||||
| size_t ossl_rand_pool_entropy(RAND_POOL *pool); | ||||
| size_t ossl_rand_pool_length(RAND_POOL *pool); | ||||
|  | ||||
| size_t ossl_rand_pool_entropy_available(RAND_POOL *pool); | ||||
| size_t ossl_rand_pool_entropy_needed(RAND_POOL *pool); | ||||
| /* |entropy_factor| expresses how many bits of data contain 1 bit of entropy */ | ||||
| size_t ossl_rand_pool_bytes_needed(RAND_POOL *pool, unsigned int entropy_factor); | ||||
| size_t ossl_rand_pool_bytes_remaining(RAND_POOL *pool); | ||||
|  | ||||
| int ossl_rand_pool_add(RAND_POOL *pool, | ||||
|                        const unsigned char *buffer, size_t len, size_t entropy); | ||||
| unsigned char *ossl_rand_pool_add_begin(RAND_POOL *pool, size_t len); | ||||
| int ossl_rand_pool_add_end(RAND_POOL *pool, size_t len, size_t entropy); | ||||
|  | ||||
| #endif /* OSSL_PROVIDER_RAND_POOL_H */ | ||||
| @@ -1,27 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_RANDERR_H | ||||
| # define OSSL_CRYPTO_RANDERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| int ossl_err_load_RAND_strings(void); | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,43 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2022 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| /* X Macro Definitions for Specification of RISC-V Arch Capabilities */ | ||||
|  | ||||
| /* | ||||
|  * Each RISC-V capability ends up encoded as a single set bit in an array of | ||||
|  * words. When specifying a new capability, write a new RISCV_DEFINE_CAP | ||||
|  * statement, with an argument as the extension name in all-caps, | ||||
|  * second argument as the index in the array where the capability will be stored | ||||
|  * and third argument as the index of the bit to be used to encode the | ||||
|  * capability. | ||||
|  * RISCV_DEFINE_CAP(EXTENSION NAME, array index, bit index) */ | ||||
|  | ||||
| RISCV_DEFINE_CAP(ZBA, 0, 0) | ||||
| RISCV_DEFINE_CAP(ZBB, 0, 1) | ||||
| RISCV_DEFINE_CAP(ZBC, 0, 2) | ||||
| RISCV_DEFINE_CAP(ZBS, 0, 3) | ||||
| RISCV_DEFINE_CAP(ZBKB, 0, 4) | ||||
| RISCV_DEFINE_CAP(ZBKC, 0, 5) | ||||
| RISCV_DEFINE_CAP(ZBKX, 0, 6) | ||||
| RISCV_DEFINE_CAP(ZKND, 0, 7) | ||||
| RISCV_DEFINE_CAP(ZKNE, 0, 8) | ||||
| RISCV_DEFINE_CAP(ZKNH, 0, 9) | ||||
| RISCV_DEFINE_CAP(ZKSED, 0, 10) | ||||
| RISCV_DEFINE_CAP(ZKSH, 0, 11) | ||||
| RISCV_DEFINE_CAP(ZKR, 0, 12) | ||||
| RISCV_DEFINE_CAP(ZKT, 0, 13) | ||||
|  | ||||
| /* | ||||
|  * In the future ... | ||||
|  * RISCV_DEFINE_CAP(ZFOO, 0, 31) | ||||
|  * RISCV_DEFINE_CAP(ZBAR, 1, 0) | ||||
|  * ... and so on. | ||||
|  */ | ||||
|  | ||||
| #undef RISCV_DEFINE_CAP | ||||
| @@ -1,64 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2022-2023 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_RISCV_ARCH_H | ||||
| # define OSSL_CRYPTO_RISCV_ARCH_H | ||||
|  | ||||
| # include <ctype.h> | ||||
| # include <stdint.h> | ||||
|  | ||||
| # define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) +1 | ||||
| extern uint32_t OPENSSL_riscvcap_P[ (( | ||||
| # include "riscv_arch.def" | ||||
| ) + sizeof(uint32_t) - 1) / sizeof(uint32_t) ]; | ||||
|  | ||||
| # ifdef OPENSSL_RISCVCAP_IMPL | ||||
| #  define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) +1 | ||||
| uint32_t OPENSSL_riscvcap_P[ (( | ||||
| #  include "riscv_arch.def" | ||||
| ) + sizeof(uint32_t) - 1) / sizeof(uint32_t) ]; | ||||
| # endif | ||||
|  | ||||
| # define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX)                   \ | ||||
|     static inline int RISCV_HAS_##NAME(void)                        \ | ||||
|     {                                                               \ | ||||
|         return (OPENSSL_riscvcap_P[INDEX] & (1 << BIT_INDEX)) != 0; \ | ||||
|     } | ||||
| # include "riscv_arch.def" | ||||
|  | ||||
| struct RISCV_capability_s { | ||||
|     const char *name; | ||||
|     size_t index; | ||||
|     size_t bit_offset; | ||||
| }; | ||||
|  | ||||
| # define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) +1 | ||||
| extern const struct RISCV_capability_s RISCV_capabilities[ | ||||
| # include "riscv_arch.def" | ||||
| ]; | ||||
|  | ||||
| # ifdef OPENSSL_RISCVCAP_IMPL | ||||
| #  define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) \ | ||||
|     { #NAME, INDEX, BIT_INDEX }, | ||||
| const struct RISCV_capability_s RISCV_capabilities[] = { | ||||
| #  include "riscv_arch.def" | ||||
| }; | ||||
| # endif | ||||
|  | ||||
| # define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) +1 | ||||
| static const size_t kRISCVNumCaps = | ||||
| # include "riscv_arch.def" | ||||
| ; | ||||
|  | ||||
| /* Extension combination tests. */ | ||||
| #define RISCV_HAS_ZBB_AND_ZBC() (RISCV_HAS_ZBB() && RISCV_HAS_ZBC()) | ||||
| #define RISCV_HAS_ZBKB_AND_ZKND_AND_ZKNE() (RISCV_HAS_ZBKB() && RISCV_HAS_ZKND() && RISCV_HAS_ZKNE()) | ||||
| #define RISCV_HAS_ZKND_AND_ZKNE() (RISCV_HAS_ZKND() && RISCV_HAS_ZKNE()) | ||||
|  | ||||
| #endif | ||||
| @@ -1,132 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_INTERNAL_RSA_H | ||||
| # define OSSL_INTERNAL_RSA_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/core.h> | ||||
| # include <openssl/rsa.h> | ||||
| # include "crypto/types.h" | ||||
|  | ||||
| #define RSA_MIN_MODULUS_BITS    512 | ||||
|  | ||||
| typedef struct rsa_pss_params_30_st { | ||||
|     int hash_algorithm_nid; | ||||
|     struct { | ||||
|         int algorithm_nid;       /* Currently always NID_mgf1 */ | ||||
|         int hash_algorithm_nid; | ||||
|     } mask_gen; | ||||
|     int salt_len; | ||||
|     int trailer_field; | ||||
| } RSA_PSS_PARAMS_30; | ||||
|  | ||||
| RSA_PSS_PARAMS_30 *ossl_rsa_get0_pss_params_30(RSA *r); | ||||
| int ossl_rsa_pss_params_30_set_defaults(RSA_PSS_PARAMS_30 *rsa_pss_params); | ||||
| int ossl_rsa_pss_params_30_copy(RSA_PSS_PARAMS_30 *to, | ||||
|                                 const RSA_PSS_PARAMS_30 *from); | ||||
| int ossl_rsa_pss_params_30_is_unrestricted(const RSA_PSS_PARAMS_30 *rsa_pss_params); | ||||
| int ossl_rsa_pss_params_30_set_hashalg(RSA_PSS_PARAMS_30 *rsa_pss_params, | ||||
|                                        int hashalg_nid); | ||||
| int ossl_rsa_pss_params_30_set_maskgenhashalg(RSA_PSS_PARAMS_30 *rsa_pss_params, | ||||
|                                               int maskgenhashalg_nid); | ||||
| int ossl_rsa_pss_params_30_set_saltlen(RSA_PSS_PARAMS_30 *rsa_pss_params, | ||||
|                                        int saltlen); | ||||
| int ossl_rsa_pss_params_30_set_trailerfield(RSA_PSS_PARAMS_30 *rsa_pss_params, | ||||
|                                             int trailerfield); | ||||
| int ossl_rsa_pss_params_30_hashalg(const RSA_PSS_PARAMS_30 *rsa_pss_params); | ||||
| int ossl_rsa_pss_params_30_maskgenalg(const RSA_PSS_PARAMS_30 *rsa_pss_params); | ||||
| int ossl_rsa_pss_params_30_maskgenhashalg(const RSA_PSS_PARAMS_30 *rsa_pss_params); | ||||
| int ossl_rsa_pss_params_30_saltlen(const RSA_PSS_PARAMS_30 *rsa_pss_params); | ||||
| int ossl_rsa_pss_params_30_trailerfield(const RSA_PSS_PARAMS_30 *rsa_pss_params); | ||||
|  | ||||
| const char *ossl_rsa_mgf_nid2name(int mgf); | ||||
| int ossl_rsa_oaeppss_md2nid(const EVP_MD *md); | ||||
| const char *ossl_rsa_oaeppss_nid2name(int md); | ||||
|  | ||||
| RSA *ossl_rsa_new_with_ctx(OSSL_LIB_CTX *libctx); | ||||
| OSSL_LIB_CTX *ossl_rsa_get0_libctx(RSA *r); | ||||
| void ossl_rsa_set0_libctx(RSA *r, OSSL_LIB_CTX *libctx); | ||||
|  | ||||
| int ossl_rsa_set0_all_params(RSA *r, const STACK_OF(BIGNUM) *primes, | ||||
|                              const STACK_OF(BIGNUM) *exps, | ||||
|                              const STACK_OF(BIGNUM) *coeffs); | ||||
| int ossl_rsa_get0_all_params(RSA *r, STACK_OF(BIGNUM_const) *primes, | ||||
|                              STACK_OF(BIGNUM_const) *exps, | ||||
|                              STACK_OF(BIGNUM_const) *coeffs); | ||||
| int ossl_rsa_is_foreign(const RSA *rsa); | ||||
| RSA *ossl_rsa_dup(const RSA *rsa, int selection); | ||||
|  | ||||
| int ossl_rsa_todata(RSA *rsa, OSSL_PARAM_BLD *bld, OSSL_PARAM params[], | ||||
|                     int include_private); | ||||
| int ossl_rsa_fromdata(RSA *rsa, const OSSL_PARAM params[], int include_private); | ||||
| int ossl_rsa_pss_params_30_todata(const RSA_PSS_PARAMS_30 *pss, | ||||
|                                   OSSL_PARAM_BLD *bld, OSSL_PARAM params[]); | ||||
| int ossl_rsa_pss_params_30_fromdata(RSA_PSS_PARAMS_30 *pss_params, | ||||
|                                     int *defaults_set, | ||||
|                                     const OSSL_PARAM params[], | ||||
|                                     OSSL_LIB_CTX *libctx); | ||||
| int ossl_rsa_set0_pss_params(RSA *r, RSA_PSS_PARAMS *pss); | ||||
| int ossl_rsa_pss_get_param_unverified(const RSA_PSS_PARAMS *pss, | ||||
|                                       const EVP_MD **pmd, const EVP_MD **pmgf1md, | ||||
|                                       int *psaltlen, int *ptrailerField); | ||||
| RSA_PSS_PARAMS *ossl_rsa_pss_decode(const X509_ALGOR *alg); | ||||
| int ossl_rsa_param_decode(RSA *rsa, const X509_ALGOR *alg); | ||||
| RSA *ossl_rsa_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, | ||||
|                              OSSL_LIB_CTX *libctx, const char *propq); | ||||
|  | ||||
| int ossl_rsa_padding_check_PKCS1_type_2(OSSL_LIB_CTX *ctx, | ||||
|                                         unsigned char *to, int tlen, | ||||
|                                         const unsigned char *from, int flen, | ||||
|                                         int num, unsigned char *kdk); | ||||
| int ossl_rsa_padding_check_PKCS1_type_2_TLS(OSSL_LIB_CTX *ctx, unsigned char *to, | ||||
|                                             size_t tlen, | ||||
|                                             const unsigned char *from, | ||||
|                                             size_t flen, int client_version, | ||||
|                                             int alt_version); | ||||
| int ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex(OSSL_LIB_CTX *libctx, | ||||
|                                             unsigned char *to, int tlen, | ||||
|                                             const unsigned char *from, int flen, | ||||
|                                             const unsigned char *param, | ||||
|                                             int plen, const EVP_MD *md, | ||||
|                                             const EVP_MD *mgf1md); | ||||
|  | ||||
| int ossl_rsa_validate_public(const RSA *key); | ||||
| int ossl_rsa_validate_private(const RSA *key); | ||||
| int ossl_rsa_validate_pairwise(const RSA *key); | ||||
|  | ||||
| int ossl_rsa_verify(int dtype, const unsigned char *m, | ||||
|                     unsigned int m_len, unsigned char *rm, | ||||
|                     size_t *prm_len, const unsigned char *sigbuf, | ||||
|                     size_t siglen, RSA *rsa); | ||||
|  | ||||
| const unsigned char *ossl_rsa_digestinfo_encoding(int md_nid, size_t *len); | ||||
|  | ||||
| extern const char *ossl_rsa_mp_factor_names[]; | ||||
| extern const char *ossl_rsa_mp_exp_names[]; | ||||
| extern const char *ossl_rsa_mp_coeff_names[]; | ||||
|  | ||||
| ASN1_STRING *ossl_rsa_ctx_to_pss_string(EVP_PKEY_CTX *pkctx); | ||||
| int ossl_rsa_pss_to_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pkctx, | ||||
|                         const X509_ALGOR *sigalg, EVP_PKEY *pkey); | ||||
|  | ||||
| # if defined(FIPS_MODULE) && !defined(OPENSSL_NO_ACVP_TESTS) | ||||
| int ossl_rsa_acvp_test_gen_params_new(OSSL_PARAM **dst, const OSSL_PARAM src[]); | ||||
| void ossl_rsa_acvp_test_gen_params_free(OSSL_PARAM *dst); | ||||
|  | ||||
| int ossl_rsa_acvp_test_set_params(RSA *r, const OSSL_PARAM params[]); | ||||
| int ossl_rsa_acvp_test_get_params(RSA *r, OSSL_PARAM params[]); | ||||
| typedef struct rsa_acvp_test_st RSA_ACVP_TEST; | ||||
| void ossl_rsa_acvp_test_free(RSA_ACVP_TEST *t); | ||||
| # else | ||||
| # define RSA_ACVP_TEST void | ||||
| # endif | ||||
|  | ||||
| RSA *evp_pkey_get1_RSA_PSS(EVP_PKEY *pkey); | ||||
| #endif | ||||
| @@ -1,27 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_RSAERR_H | ||||
| # define OSSL_CRYPTO_RSAERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| int ossl_err_load_RSA_strings(void); | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,16 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_SECURITY_BITS_H | ||||
| # define OSSL_SECURITY_BITS_H | ||||
| # pragma once | ||||
|  | ||||
| uint16_t ossl_ifc_ffc_compute_security_bits(int n); | ||||
|  | ||||
| #endif | ||||
| @@ -1,23 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2018-2023 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * Copyright (c) 2018, Oracle and/or its affiliates.  All rights reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_SHA_H | ||||
| # define OSSL_CRYPTO_SHA_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/sha.h> | ||||
|  | ||||
| int ossl_sha256_192_init(SHA256_CTX *c); | ||||
| int sha512_224_init(SHA512_CTX *); | ||||
| int sha512_256_init(SHA512_CTX *); | ||||
| int ossl_sha1_ctrl(SHA_CTX *ctx, int cmd, int mslen, void *ms); | ||||
| unsigned char *ossl_sha1(const unsigned char *d, size_t n, unsigned char *md); | ||||
|  | ||||
| #endif | ||||
| @@ -1,50 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_SIPHASH_H | ||||
| # define OSSL_CRYPTO_SIPHASH_H | ||||
| # pragma once | ||||
|  | ||||
| # include <stddef.h> | ||||
|  | ||||
| # define SIPHASH_BLOCK_SIZE        8 | ||||
| # define SIPHASH_KEY_SIZE         16 | ||||
| # define SIPHASH_MIN_DIGEST_SIZE   8 | ||||
| # define SIPHASH_MAX_DIGEST_SIZE  16 | ||||
|  | ||||
| typedef struct siphash_st SIPHASH; | ||||
|  | ||||
| size_t SipHash_ctx_size(void); | ||||
| size_t SipHash_hash_size(SIPHASH *ctx); | ||||
| int SipHash_set_hash_size(SIPHASH *ctx, size_t hash_size); | ||||
| int SipHash_Init(SIPHASH *ctx, const unsigned char *k, | ||||
|                  int crounds, int drounds); | ||||
| void SipHash_Update(SIPHASH *ctx, const unsigned char *in, size_t inlen); | ||||
| int SipHash_Final(SIPHASH *ctx, unsigned char *out, size_t outlen); | ||||
|  | ||||
| /* Based on https://131002.net/siphash C reference implementation */ | ||||
|  | ||||
| struct siphash_st { | ||||
|     uint64_t total_inlen; | ||||
|     uint64_t v0; | ||||
|     uint64_t v1; | ||||
|     uint64_t v2; | ||||
|     uint64_t v3; | ||||
|     unsigned int len; | ||||
|     unsigned int hash_size; | ||||
|     unsigned int crounds; | ||||
|     unsigned int drounds; | ||||
|     unsigned char leavings[SIPHASH_BLOCK_SIZE]; | ||||
| }; | ||||
|  | ||||
| /* default: SipHash-2-4 */ | ||||
| # define SIPHASH_C_ROUNDS 2 | ||||
| # define SIPHASH_D_ROUNDS 4 | ||||
|  | ||||
| #endif | ||||
| @@ -1,33 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OPENSSL_NO_SIV | ||||
|  | ||||
| typedef struct siv128_context SIV128_CONTEXT; | ||||
|  | ||||
| SIV128_CONTEXT *ossl_siv128_new(const unsigned char *key, int klen, | ||||
|                                 EVP_CIPHER *cbc, EVP_CIPHER *ctr, | ||||
|                                 OSSL_LIB_CTX *libctx, const char *propq); | ||||
| int ossl_siv128_init(SIV128_CONTEXT *ctx, const unsigned char *key, int klen, | ||||
|                      const EVP_CIPHER *cbc, const EVP_CIPHER *ctr, | ||||
|                      OSSL_LIB_CTX *libctx, const char *propq); | ||||
| int ossl_siv128_copy_ctx(SIV128_CONTEXT *dest, SIV128_CONTEXT *src); | ||||
| int ossl_siv128_aad(SIV128_CONTEXT *ctx, const unsigned char *aad, size_t len); | ||||
| int ossl_siv128_encrypt(SIV128_CONTEXT *ctx, | ||||
|                         const unsigned char *in, unsigned char *out, size_t len); | ||||
| int ossl_siv128_decrypt(SIV128_CONTEXT *ctx, | ||||
|                         const unsigned char *in, unsigned char *out, size_t len); | ||||
| int ossl_siv128_finish(SIV128_CONTEXT *ctx); | ||||
| int ossl_siv128_set_tag(SIV128_CONTEXT *ctx, const unsigned char *tag, | ||||
|                         size_t len); | ||||
| int ossl_siv128_get_tag(SIV128_CONTEXT *ctx, unsigned char *tag, size_t len); | ||||
| int ossl_siv128_cleanup(SIV128_CONTEXT *ctx); | ||||
| int ossl_siv128_speed(SIV128_CONTEXT *ctx, int arg); | ||||
|  | ||||
| #endif /* OPENSSL_NO_SIV */ | ||||
| @@ -1,86 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * Copyright 2017 Ribose Inc. All Rights Reserved. | ||||
|  * Ported from Ribose contributions from Botan. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_SM2_H | ||||
| # define OSSL_CRYPTO_SM2_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
|  | ||||
| # if !defined(OPENSSL_NO_SM2) && !defined(FIPS_MODULE) | ||||
|  | ||||
| #  include <openssl/ec.h> | ||||
| #  include "crypto/types.h" | ||||
|  | ||||
| int ossl_sm2_key_private_check(const EC_KEY *eckey); | ||||
|  | ||||
| /* The default user id as specified in GM/T 0009-2012 */ | ||||
| #  define SM2_DEFAULT_USERID "1234567812345678" | ||||
|  | ||||
| int ossl_sm2_compute_z_digest(uint8_t *out, | ||||
|                               const EVP_MD *digest, | ||||
|                               const uint8_t *id, | ||||
|                               const size_t id_len, | ||||
|                               const EC_KEY *key); | ||||
|  | ||||
| /* | ||||
|  * SM2 signature operation. Computes Z and then signs H(Z || msg) using SM2 | ||||
|  */ | ||||
| ECDSA_SIG *ossl_sm2_do_sign(const EC_KEY *key, | ||||
|                             const EVP_MD *digest, | ||||
|                             const uint8_t *id, | ||||
|                             const size_t id_len, | ||||
|                             const uint8_t *msg, size_t msg_len); | ||||
|  | ||||
| int ossl_sm2_do_verify(const EC_KEY *key, | ||||
|                        const EVP_MD *digest, | ||||
|                        const ECDSA_SIG *signature, | ||||
|                        const uint8_t *id, | ||||
|                        const size_t id_len, | ||||
|                        const uint8_t *msg, size_t msg_len); | ||||
|  | ||||
| /* | ||||
|  * SM2 signature generation. | ||||
|  */ | ||||
| int ossl_sm2_internal_sign(const unsigned char *dgst, int dgstlen, | ||||
|                            unsigned char *sig, unsigned int *siglen, | ||||
|                            EC_KEY *eckey); | ||||
|  | ||||
| /* | ||||
|  * SM2 signature verification. | ||||
|  */ | ||||
| int ossl_sm2_internal_verify(const unsigned char *dgst, int dgstlen, | ||||
|                              const unsigned char *sig, int siglen, | ||||
|                              EC_KEY *eckey); | ||||
|  | ||||
| /* | ||||
|  * SM2 encryption | ||||
|  */ | ||||
| int ossl_sm2_ciphertext_size(const EC_KEY *key, const EVP_MD *digest, | ||||
|                              size_t msg_len, size_t *ct_size); | ||||
|  | ||||
| int ossl_sm2_plaintext_size(const unsigned char *ct, size_t ct_size, | ||||
|                             size_t *pt_size); | ||||
|  | ||||
| int ossl_sm2_encrypt(const EC_KEY *key, | ||||
|                      const EVP_MD *digest, | ||||
|                      const uint8_t *msg, size_t msg_len, | ||||
|                      uint8_t *ciphertext_buf, size_t *ciphertext_len); | ||||
|  | ||||
| int ossl_sm2_decrypt(const EC_KEY *key, | ||||
|                      const EVP_MD *digest, | ||||
|                      const uint8_t *ciphertext, size_t ciphertext_len, | ||||
|                      uint8_t *ptext_buf, size_t *ptext_len); | ||||
|  | ||||
| const unsigned char *ossl_sm2_algorithmidentifier_encoding(int md_nid, | ||||
|                                                            size_t *len); | ||||
| # endif /* OPENSSL_NO_SM2 */ | ||||
| #endif | ||||
| @@ -1,49 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_SM2ERR_H | ||||
| # define OSSL_CRYPTO_SM2ERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| # ifndef OPENSSL_NO_SM2 | ||||
|  | ||||
| int ossl_err_load_SM2_strings(void); | ||||
|  | ||||
| /* | ||||
|  * SM2 reason codes. | ||||
|  */ | ||||
| #  define SM2_R_ASN1_ERROR                                 100 | ||||
| #  define SM2_R_BAD_SIGNATURE                              101 | ||||
| #  define SM2_R_BUFFER_TOO_SMALL                           107 | ||||
| #  define SM2_R_DIST_ID_TOO_LARGE                          110 | ||||
| #  define SM2_R_ID_NOT_SET                                 112 | ||||
| #  define SM2_R_ID_TOO_LARGE                               111 | ||||
| #  define SM2_R_INVALID_CURVE                              108 | ||||
| #  define SM2_R_INVALID_DIGEST                             102 | ||||
| #  define SM2_R_INVALID_DIGEST_TYPE                        103 | ||||
| #  define SM2_R_INVALID_ENCODING                           104 | ||||
| #  define SM2_R_INVALID_FIELD                              105 | ||||
| #  define SM2_R_INVALID_PRIVATE_KEY                        113 | ||||
| #  define SM2_R_NO_PARAMETERS_SET                          109 | ||||
| #  define SM2_R_USER_ID_TOO_LARGE                          106 | ||||
|  | ||||
| # endif | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,38 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * Copyright 2017 Ribose Inc. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_SM4_H | ||||
| # define OSSL_CRYPTO_SM4_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/e_os2.h> | ||||
|  | ||||
| # ifdef OPENSSL_NO_SM4 | ||||
| #  error SM4 is disabled. | ||||
| # endif | ||||
|  | ||||
| # define SM4_ENCRYPT     1 | ||||
| # define SM4_DECRYPT     0 | ||||
|  | ||||
| # define SM4_BLOCK_SIZE    16 | ||||
| # define SM4_KEY_SCHEDULE  32 | ||||
|  | ||||
| typedef struct SM4_KEY_st { | ||||
|     uint32_t rk[SM4_KEY_SCHEDULE]; | ||||
| } SM4_KEY; | ||||
|  | ||||
| int ossl_sm4_set_key(const uint8_t *key, SM4_KEY *ks); | ||||
|  | ||||
| void ossl_sm4_encrypt(const uint8_t *in, uint8_t *out, const SM4_KEY *ks); | ||||
|  | ||||
| void ossl_sm4_decrypt(const uint8_t *in, uint8_t *out, const SM4_KEY *ks); | ||||
|  | ||||
| #endif | ||||
| @@ -1,111 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2022-2023 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_SM4_PLATFORM_H | ||||
| # define OSSL_SM4_PLATFORM_H | ||||
| # pragma once | ||||
|  | ||||
| # if defined(OPENSSL_CPUID_OBJ) | ||||
| #  if defined(__aarch64__) ||  defined (_M_ARM64) | ||||
| #   include "arm_arch.h" | ||||
| extern unsigned int OPENSSL_arm_midr; | ||||
| static inline int vpsm4_capable(void) | ||||
| { | ||||
|     return (OPENSSL_armcap_P & ARMV8_CPUID) && | ||||
|             (MIDR_IS_CPU_MODEL(OPENSSL_arm_midr, ARM_CPU_IMP_ARM, ARM_CPU_PART_V1) || | ||||
|              MIDR_IS_CPU_MODEL(OPENSSL_arm_midr, ARM_CPU_IMP_ARM, ARM_CPU_PART_N1)); | ||||
| } | ||||
| static inline int vpsm4_ex_capable(void) | ||||
| { | ||||
|     return (OPENSSL_armcap_P & ARMV8_CPUID) && | ||||
|             (MIDR_IS_CPU_MODEL(OPENSSL_arm_midr, HISI_CPU_IMP, HISI_CPU_PART_KP920)); | ||||
| } | ||||
| #   if defined(VPSM4_ASM) | ||||
| #    define VPSM4_CAPABLE vpsm4_capable() | ||||
| #    define VPSM4_EX_CAPABLE vpsm4_ex_capable() | ||||
| #   endif | ||||
| #   define HWSM4_CAPABLE (OPENSSL_armcap_P & ARMV8_SM4) | ||||
| #   define HWSM4_set_encrypt_key sm4_v8_set_encrypt_key | ||||
| #   define HWSM4_set_decrypt_key sm4_v8_set_decrypt_key | ||||
| #   define HWSM4_encrypt sm4_v8_encrypt | ||||
| #   define HWSM4_decrypt sm4_v8_decrypt | ||||
| #   define HWSM4_cbc_encrypt sm4_v8_cbc_encrypt | ||||
| #   define HWSM4_ecb_encrypt sm4_v8_ecb_encrypt | ||||
| #   define HWSM4_ctr32_encrypt_blocks sm4_v8_ctr32_encrypt_blocks | ||||
| #  endif | ||||
| # endif /* OPENSSL_CPUID_OBJ */ | ||||
|  | ||||
| # if defined(HWSM4_CAPABLE) | ||||
| int HWSM4_set_encrypt_key(const unsigned char *userKey, SM4_KEY *key); | ||||
| int HWSM4_set_decrypt_key(const unsigned char *userKey, SM4_KEY *key); | ||||
| void HWSM4_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                    const SM4_KEY *key); | ||||
| void HWSM4_decrypt(const unsigned char *in, unsigned char *out, | ||||
|                    const SM4_KEY *key); | ||||
| void HWSM4_cbc_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                        size_t length, const SM4_KEY *key, | ||||
|                        unsigned char *ivec, const int enc); | ||||
| void HWSM4_ecb_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                        size_t length, const SM4_KEY *key, | ||||
|                        const int enc); | ||||
| void HWSM4_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out, | ||||
|                                 size_t len, const void *key, | ||||
|                                 const unsigned char ivec[16]); | ||||
| # endif /* HWSM4_CAPABLE */ | ||||
|  | ||||
| # ifdef VPSM4_CAPABLE | ||||
| int vpsm4_set_encrypt_key(const unsigned char *userKey, SM4_KEY *key); | ||||
| int vpsm4_set_decrypt_key(const unsigned char *userKey, SM4_KEY *key); | ||||
| void vpsm4_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                    const SM4_KEY *key); | ||||
| void vpsm4_decrypt(const unsigned char *in, unsigned char *out, | ||||
|                    const SM4_KEY *key); | ||||
| void vpsm4_cbc_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                        size_t length, const SM4_KEY *key, | ||||
|                        unsigned char *ivec, const int enc); | ||||
| void vpsm4_ecb_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                        size_t length, const SM4_KEY *key, | ||||
|                        const int enc); | ||||
| void vpsm4_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out, | ||||
|                                 size_t len, const void *key, | ||||
|                                 const unsigned char ivec[16]); | ||||
| void vpsm4_xts_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                        size_t len, const SM4_KEY *key1, const SM4_KEY *key2, | ||||
|                        const unsigned char ivec[16], const int enc); | ||||
| void vpsm4_xts_encrypt_gb(const unsigned char *in, unsigned char *out, | ||||
|                           size_t len, const SM4_KEY *key1, const SM4_KEY *key2, | ||||
|                           const unsigned char ivec[16], const int enc); | ||||
| # endif /* VPSM4_CAPABLE */ | ||||
|  | ||||
| # ifdef VPSM4_EX_CAPABLE | ||||
| int vpsm4_ex_set_encrypt_key(const unsigned char *userKey, SM4_KEY *key); | ||||
| int vpsm4_ex_set_decrypt_key(const unsigned char *userKey, SM4_KEY *key); | ||||
| void vpsm4_ex_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                       const SM4_KEY *key); | ||||
| void vpsm4_ex_decrypt(const unsigned char *in, unsigned char *out, | ||||
|                       const SM4_KEY *key); | ||||
| void vpsm4_ex_cbc_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                           size_t length, const SM4_KEY *key, | ||||
|                           unsigned char *ivec, const int enc); | ||||
| void vpsm4_ex_ecb_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                           size_t length, const SM4_KEY *key, | ||||
|                           const int enc); | ||||
| void vpsm4_ex_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out, | ||||
|                                    size_t len, const void *key, | ||||
|                                    const unsigned char ivec[16]); | ||||
| void vpsm4_ex_xts_encrypt(const unsigned char *in, unsigned char *out, | ||||
|                           size_t len, const SM4_KEY *key1, const SM4_KEY *key2, | ||||
|                           const unsigned char ivec[16], const int enc); | ||||
| void vpsm4_ex_xts_encrypt_gb(const unsigned char *in, unsigned char *out, | ||||
|                              size_t len, const SM4_KEY *key1, | ||||
|                              const SM4_KEY *key2, const unsigned char ivec[16], | ||||
|                              const int enc); | ||||
| # endif /* VPSM4_EX_CAPABLE */ | ||||
|  | ||||
| #endif /* OSSL_SM4_PLATFORM_H */ | ||||
| @@ -1,122 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2012-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_SPARC_ARCH_H | ||||
| # define OSSL_CRYPTO_SPARC_ARCH_H | ||||
|  | ||||
| # define SPARCV9_TICK_PRIVILEGED (1<<0) | ||||
| # define SPARCV9_PREFER_FPU      (1<<1) | ||||
| # define SPARCV9_VIS1            (1<<2) | ||||
| # define SPARCV9_VIS2            (1<<3)/* reserved */ | ||||
| # define SPARCV9_FMADD           (1<<4) | ||||
| # define SPARCV9_BLK             (1<<5)/* VIS1 block copy */ | ||||
| # define SPARCV9_VIS3            (1<<6) | ||||
| # define SPARCV9_RANDOM          (1<<7) | ||||
| # define SPARCV9_64BIT_STACK     (1<<8) | ||||
| # define SPARCV9_FJAESX          (1<<9)/* Fujitsu SPARC64 X AES */ | ||||
| # define SPARCV9_FJDESX          (1<<10)/* Fujitsu SPARC64 X DES, reserved */ | ||||
| # define SPARCV9_FJHPCACE        (1<<11)/* Fujitsu HPC-ACE, reserved */ | ||||
| # define SPARCV9_IMA             (1<<13)/* reserved */ | ||||
| # define SPARCV9_VIS4            (1<<14)/* reserved */ | ||||
|  | ||||
| /* | ||||
|  * OPENSSL_sparcv9cap_P[1] is copy of Compatibility Feature Register, | ||||
|  * %asr26, SPARC-T4 and later. There is no SPARCV9_CFR bit in | ||||
|  * OPENSSL_sparcv9cap_P[0], as %cfr copy is sufficient... | ||||
|  */ | ||||
| # define CFR_AES         0x00000001/* Supports AES opcodes */ | ||||
| # define CFR_DES         0x00000002/* Supports DES opcodes */ | ||||
| # define CFR_KASUMI      0x00000004/* Supports KASUMI opcodes */ | ||||
| # define CFR_CAMELLIA    0x00000008/* Supports CAMELLIA opcodes */ | ||||
| # define CFR_MD5         0x00000010/* Supports MD5 opcodes */ | ||||
| # define CFR_SHA1        0x00000020/* Supports SHA1 opcodes */ | ||||
| # define CFR_SHA256      0x00000040/* Supports SHA256 opcodes */ | ||||
| # define CFR_SHA512      0x00000080/* Supports SHA512 opcodes */ | ||||
| # define CFR_MPMUL       0x00000100/* Supports MPMUL opcodes */ | ||||
| # define CFR_MONTMUL     0x00000200/* Supports MONTMUL opcodes */ | ||||
| # define CFR_MONTSQR     0x00000400/* Supports MONTSQR opcodes */ | ||||
| # define CFR_CRC32C      0x00000800/* Supports CRC32C opcodes */ | ||||
| # define CFR_XMPMUL      0x00001000/* Supports XMPMUL opcodes */ | ||||
| # define CFR_XMONTMUL    0x00002000/* Supports XMONTMUL opcodes */ | ||||
| # define CFR_XMONTSQR    0x00004000/* Supports XMONTSQR opcodes */ | ||||
|  | ||||
| # if defined(OPENSSL_PIC) && !defined(__PIC__) | ||||
| #  define __PIC__ | ||||
| # endif | ||||
|  | ||||
| # if defined(__SUNPRO_C) && defined(__sparcv9) && !defined(__arch64__) | ||||
| #  define __arch64__ | ||||
| # endif | ||||
|  | ||||
| # define SPARC_PIC_THUNK(reg)    \ | ||||
|         .align  32;             \ | ||||
| .Lpic_thunk:                    \ | ||||
|         jmp     %o7 + 8;        \ | ||||
|          add    %o7, reg, reg; | ||||
|  | ||||
| # define SPARC_PIC_THUNK_CALL(reg)                       \ | ||||
|         sethi   %hi(_GLOBAL_OFFSET_TABLE_-4), reg;      \ | ||||
|         call    .Lpic_thunk;                            \ | ||||
|          or     reg, %lo(_GLOBAL_OFFSET_TABLE_+4), reg; | ||||
|  | ||||
| # if 1 | ||||
| #  define SPARC_SETUP_GOT_REG(reg)       SPARC_PIC_THUNK_CALL(reg) | ||||
| # else | ||||
| #  define SPARC_SETUP_GOT_REG(reg)       \ | ||||
|         sethi   %hi(_GLOBAL_OFFSET_TABLE_-4), reg;      \ | ||||
|         call    .+8;                                    \ | ||||
|         or      reg,%lo(_GLOBAL_OFFSET_TABLE_+4), reg;  \ | ||||
|         add     %o7, reg, reg | ||||
| # endif | ||||
|  | ||||
| # if defined(__arch64__) | ||||
|  | ||||
| #  define SPARC_LOAD_ADDRESS(SYM, reg)   \ | ||||
|         setx    SYM, %o7, reg; | ||||
| #  define LDPTR          ldx | ||||
| #  define SIZE_T_CC      %xcc | ||||
| #  define STACK_FRAME    192 | ||||
| #  define STACK_BIAS     2047 | ||||
| #  define STACK_7thARG   (STACK_BIAS+176) | ||||
|  | ||||
| # else | ||||
|  | ||||
| #  define SPARC_LOAD_ADDRESS(SYM, reg)   \ | ||||
|         set     SYM, reg; | ||||
| #  define LDPTR          ld | ||||
| #  define SIZE_T_CC      %icc | ||||
| #  define STACK_FRAME    112 | ||||
| #  define STACK_BIAS     0 | ||||
| #  define STACK_7thARG   92 | ||||
| #  define SPARC_LOAD_ADDRESS_LEAF(SYM,reg,tmp) SPARC_LOAD_ADDRESS(SYM,reg) | ||||
|  | ||||
| # endif | ||||
|  | ||||
| # ifdef __PIC__ | ||||
| #  undef SPARC_LOAD_ADDRESS | ||||
| #  undef SPARC_LOAD_ADDRESS_LEAF | ||||
| #  define SPARC_LOAD_ADDRESS(SYM, reg)   \ | ||||
|         SPARC_SETUP_GOT_REG(reg);       \ | ||||
|         sethi   %hi(SYM), %o7;          \ | ||||
|         or      %o7, %lo(SYM), %o7;     \ | ||||
|         LDPTR   [reg + %o7], reg; | ||||
| # endif | ||||
|  | ||||
| # ifndef SPARC_LOAD_ADDRESS_LEAF | ||||
| #  define SPARC_LOAD_ADDRESS_LEAF(SYM, reg, tmp) \ | ||||
|         mov     %o7, tmp;                       \ | ||||
|         SPARC_LOAD_ADDRESS(SYM, reg)            \ | ||||
|         mov     tmp, %o7; | ||||
| # endif | ||||
|  | ||||
| # ifndef __ASSEMBLER__ | ||||
| extern unsigned int OPENSSL_sparcv9cap_P[2]; | ||||
| # endif | ||||
|  | ||||
| #endif                          /* OSSL_CRYPTO_SPARC_ARCH_H */ | ||||
| @@ -1,92 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * Copyright (c) 2019, Oracle and/or its affiliates.  All rights reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_SPARSE_ARRAY_H | ||||
| # define OSSL_CRYPTO_SPARSE_ARRAY_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/e_os2.h> | ||||
|  | ||||
| # ifdef __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| # define SPARSE_ARRAY_OF(type) struct sparse_array_st_ ## type | ||||
|  | ||||
| # define DEFINE_SPARSE_ARRAY_OF_INTERNAL(type, ctype) \ | ||||
|     SPARSE_ARRAY_OF(type); \ | ||||
|     static ossl_unused ossl_inline SPARSE_ARRAY_OF(type) * \ | ||||
|         ossl_sa_##type##_new(void) \ | ||||
|     { \ | ||||
|         return (SPARSE_ARRAY_OF(type) *)ossl_sa_new(); \ | ||||
|     } \ | ||||
|     static ossl_unused ossl_inline void \ | ||||
|     ossl_sa_##type##_free(SPARSE_ARRAY_OF(type) *sa) \ | ||||
|     { \ | ||||
|         ossl_sa_free((OPENSSL_SA *)sa); \ | ||||
|     } \ | ||||
|     static ossl_unused ossl_inline void \ | ||||
|     ossl_sa_##type##_free_leaves(SPARSE_ARRAY_OF(type) *sa) \ | ||||
|     { \ | ||||
|         ossl_sa_free_leaves((OPENSSL_SA *)sa); \ | ||||
|     } \ | ||||
|     static ossl_unused ossl_inline size_t \ | ||||
|     ossl_sa_##type##_num(const SPARSE_ARRAY_OF(type) *sa) \ | ||||
|     { \ | ||||
|         return ossl_sa_num((OPENSSL_SA *)sa); \ | ||||
|     } \ | ||||
|     static ossl_unused ossl_inline void \ | ||||
|     ossl_sa_##type##_doall(const SPARSE_ARRAY_OF(type) *sa, \ | ||||
|                            void (*leaf)(ossl_uintmax_t, type *)) \ | ||||
|     { \ | ||||
|         ossl_sa_doall((OPENSSL_SA *)sa, \ | ||||
|                       (void (*)(ossl_uintmax_t, void *))leaf); \ | ||||
|     } \ | ||||
|     static ossl_unused ossl_inline void \ | ||||
|     ossl_sa_##type##_doall_arg(const SPARSE_ARRAY_OF(type) *sa, \ | ||||
|                                void (*leaf)(ossl_uintmax_t, type *, void *), \ | ||||
|                                void *arg) \ | ||||
|     { \ | ||||
|         ossl_sa_doall_arg((OPENSSL_SA *)sa, \ | ||||
|                           (void (*)(ossl_uintmax_t, void *, void *))leaf, arg); \ | ||||
|     } \ | ||||
|     static ossl_unused ossl_inline ctype \ | ||||
|     *ossl_sa_##type##_get(const SPARSE_ARRAY_OF(type) *sa, ossl_uintmax_t n) \ | ||||
|     { \ | ||||
|         return (type *)ossl_sa_get((OPENSSL_SA *)sa, n); \ | ||||
|     } \ | ||||
|     static ossl_unused ossl_inline int \ | ||||
|     ossl_sa_##type##_set(SPARSE_ARRAY_OF(type) *sa, \ | ||||
|                          ossl_uintmax_t n, ctype *val) \ | ||||
|     { \ | ||||
|         return ossl_sa_set((OPENSSL_SA *)sa, n, (void *)val); \ | ||||
|     } \ | ||||
|     SPARSE_ARRAY_OF(type) | ||||
|  | ||||
| # define DEFINE_SPARSE_ARRAY_OF(type) \ | ||||
|     DEFINE_SPARSE_ARRAY_OF_INTERNAL(type, type) | ||||
| # define DEFINE_SPARSE_ARRAY_OF_CONST(type) \ | ||||
|     DEFINE_SPARSE_ARRAY_OF_INTERNAL(type, const type) | ||||
|  | ||||
| typedef struct sparse_array_st OPENSSL_SA; | ||||
| OPENSSL_SA *ossl_sa_new(void); | ||||
| void ossl_sa_free(OPENSSL_SA *sa); | ||||
| void ossl_sa_free_leaves(OPENSSL_SA *sa); | ||||
| size_t ossl_sa_num(const OPENSSL_SA *sa); | ||||
| void ossl_sa_doall(const OPENSSL_SA *sa, void (*leaf)(ossl_uintmax_t, void *)); | ||||
| void ossl_sa_doall_arg(const OPENSSL_SA *sa, | ||||
|                        void (*leaf)(ossl_uintmax_t, void *, void *), void *); | ||||
| void *ossl_sa_get(const OPENSSL_SA *sa, ossl_uintmax_t n); | ||||
| int ossl_sa_set(OPENSSL_SA *sa, ossl_uintmax_t n, void *val); | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,23 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_STORE_H | ||||
| # define OSSL_CRYPTO_STORE_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/bio.h> | ||||
| # include <openssl/store.h> | ||||
| # include <openssl/ui.h> | ||||
|  | ||||
| void ossl_store_cleanup_int(void); | ||||
| int ossl_store_loader_get_number(const OSSL_STORE_LOADER *loader); | ||||
| int ossl_store_loader_store_cache_flush(OSSL_LIB_CTX *libctx); | ||||
| int ossl_store_loader_store_remove_all_provided(const OSSL_PROVIDER *prov); | ||||
|  | ||||
| #endif | ||||
| @@ -1,27 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_STOREERR_H | ||||
| # define OSSL_CRYPTO_STOREERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| int ossl_err_load_OSSL_STORE_strings(void); | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,30 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_TSERR_H | ||||
| # define OSSL_CRYPTO_TSERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| # ifndef OPENSSL_NO_TS | ||||
|  | ||||
| int ossl_err_load_TS_strings(void); | ||||
| # endif | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
| @@ -1,32 +0,0 @@ | ||||
| /* | ||||
|  * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| /* When removal is simulated, we still need the type internally */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_TYPES_H | ||||
| # define OSSL_CRYPTO_TYPES_H | ||||
| # pragma once | ||||
|  | ||||
| # ifdef OPENSSL_NO_DEPRECATED_3_0 | ||||
| typedef struct rsa_st RSA; | ||||
| typedef struct rsa_meth_st RSA_METHOD; | ||||
| #  ifndef OPENSSL_NO_EC | ||||
| typedef struct ec_key_st EC_KEY; | ||||
| typedef struct ec_key_method_st EC_KEY_METHOD; | ||||
| #  endif | ||||
| #  ifndef OPENSSL_NO_DSA | ||||
| typedef struct dsa_st DSA; | ||||
| #  endif | ||||
| # endif | ||||
|  | ||||
| # ifndef OPENSSL_NO_EC | ||||
| typedef struct ecx_key_st ECX_KEY; | ||||
| # endif | ||||
|  | ||||
| #endif | ||||
| @@ -1,27 +0,0 @@ | ||||
| /* | ||||
|  * Generated by util/mkerr.pl DO NOT EDIT | ||||
|  * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. | ||||
|  * | ||||
|  * Licensed under the Apache License 2.0 (the "License").  You may not use | ||||
|  * this file except in compliance with the License.  You can obtain a copy | ||||
|  * in the file LICENSE in the source distribution or at | ||||
|  * https://www.openssl.org/source/license.html | ||||
|  */ | ||||
|  | ||||
| #ifndef OSSL_CRYPTO_UIERR_H | ||||
| # define OSSL_CRYPTO_UIERR_H | ||||
| # pragma once | ||||
|  | ||||
| # include <openssl/opensslconf.h> | ||||
| # include <openssl/symhacks.h> | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| extern "C" { | ||||
| # endif | ||||
|  | ||||
| int ossl_err_load_UI_strings(void); | ||||
|  | ||||
| # ifdef  __cplusplus | ||||
| } | ||||
| # endif | ||||
| #endif | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user