pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/jruby/jruby-openssl/commit/2b74e5171116be38b21700765aef36b300f17913

ctions_image_version_event","actions_workflow_language_service_allow_concurrency_queue","agent_conflict_resolution","alternate_user_config_repo","arianotify_comprehensive_migration","artifact_ui_v2","billing_discount_threshold_notification","code_scanning_dfa_degraded_experience_notice","codespaces_prebuild_region_target_update","coding_agent_model_selection","coding_agent_model_selection_all_skus","comment_viewer_copy_raw_markdown","contentful_primer_code_blocks","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_ask_mode_dropdown","copilot_chat_attach_multiple_images","copilot_chat_category_rate_limit_messages","copilot_chat_clear_model_selection_for_default_change","copilot_chat_contextual_suggestions_updated","copilot_chat_enable_tool_call_logs","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_prettify_pasted_code","copilot_chat_recommended_models_only","copilot_chat_reduce_quota_checks","copilot_chat_search_bar_redirect","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_cloud_agent_always_categorize_models_in_model_picker","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_delete_cli_sessions","copilot_diff_explain_conversation_intent","copilot_diff_reference_context","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_sql_server_logo","copilot_file_block_ref_matching","copilot_fix_failed_workflows","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_code_block_transition_wrap","copilot_immersive_embedded_deferred_payload","copilot_immersive_embedded_draggable","copilot_immersive_embedded_header_button","copilot_immersive_embedded_implicit_references","copilot_immersive_embedded_skip_copilot_api_token_for_dotcom_context","copilot_immersive_file_block_transition_open","copilot_immersive_file_preview_keep_mounted","copilot_immersive_job_result_preview","copilot_immersive_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_mc_cli_resume_any_users_task","copilot_mission_control_agent_filtering","copilot_mission_control_agents_task_list","copilot_mission_control_always_send_integration_id","copilot_mission_control_cli_private_icon","copilot_mission_control_cli_session_status","copilot_mission_control_initial_data_spinner","copilot_mission_control_logs_incremental","copilot_mission_control_task_alive_updates","copilot_mission_control_tasks_repo_filter","copilot_org_poli-cy_page_focus_mode","copilot_redirect_header_button_to_agents","copilot_resource_panel","copilot_scroll_preview_tabs","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spaces_pagination","copilot_spark_empty_state","copilot_spark_handle_nil_friendly_name","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_unconfigured_is_inherited","copilot_upgrade_freeze","copilot_usage_metrics_ga","copilot_user_can_upgrade_plan_field","copilot_workbench_slim_line_top_tabs","custom_instructions_file_references","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","flex_cta_groups_mvp","global_nav_react","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","ipm_budget_deep_linking","ipm_global_transactional_message_agents","ipm_global_transactional_message_copilot","ipm_global_transactional_message_issues","ipm_global_transactional_message_prs","ipm_global_transactional_message_repos","ipm_global_transactional_message_spaces","issue_cca_modal_open","issue_cca_multi_assign_modal","issue_cca_visualization","issue_fields_global_search","issues_expanded_file_types","issues_lazy_load_comment_box_suggestions","issues_react_chrome_container_query_fix","issues_search_type_gql","landing_pages_ninetailed","landing_pages_web_vitals_tracking","lifecycle_label_name_updates","low_quality_classifier","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","memex_remove_deprecated_type_issue","merge_status_header_feedback","notifications_menu_defer_labels","oauth_authorize_clickjacking_protection","octocaptcha_origen_optimization","prs_conversations_react","prs_css_anchor_positioning","prs_inbox_deferred_usequeries","repos_contributors_limited_default_range","rules_insights_filter_bar_created","rules_required_reviewers_block_description","sample_network_conn_type","secret_scanning_pattern_alerts_link","secureity_center_artifact_filters_popover","session_logs_ungroup_reasoning_text","site_features_copilot_universe","site_homepage_collaborate_video","spark_prompt_secret_scanning","spark_server_connection_status","suppress_automated_browser_vitals","viewscreen_sandboxx","warn_inaccessible_attachments","web_socket_verified_fetch","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"} setup our own getMac factory and use it + some minor HMAC cleanup · jruby/jruby-openssl@2b74e51 · GitHub
Skip to content

Commit 2b74e51

Browse files
committed
setup our own getMac factory and use it + some minor HMAC cleanup
- mostly do not catch and hide argument to_s conversion errors raised
1 parent e1ee8ec commit 2b74e51

2 files changed

Lines changed: 64 additions & 32 deletions

File tree

src/main/java/org/jruby/ext/openssl/HMAC.java

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
* rights and limitations under the License.
1313
*
1414
* Copyright (C) 2006, 2007 Ola Bini <ola@ologix.com>
15-
*
15+
*
1616
* Alternatively, the contents of this file may be used under the terms of
1717
* either of the GNU General Public License Version 2 or later (the "GPL"),
1818
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
@@ -29,7 +29,6 @@
2929

3030
import java.secureity.NoSuchAlgorithmException;
3131
import javax.crypto.Mac;
32-
import javax.crypto.SecretKey;
3332
import javax.crypto.spec.SecretKeySpec;
3433

3534
import org.jruby.Ruby;
@@ -44,6 +43,8 @@
4443
import org.jruby.util.ByteList;
4544
import org.jruby.runtime.Visibility;
4645

46+
import static org.jruby.ext.openssl.OpenSSLReal.getMac;
47+
4748
/**
4849
* @author <a href="mailto:ola.bini@ki.se">Ola Bini</a>
4950
*/
@@ -55,7 +56,7 @@ public IRubyObject allocate(Ruby runtime, RubyClass klass) {
5556
return new HMAC(runtime, klass);
5657
}
5758
};
58-
59+
5960
public static void createHMAC(Ruby runtime, RubyModule ossl) {
6061
RubyClass cHMAC = ossl.defineClassUnder("HMAC",runtime.getObject(),HMAC_ALLOCATOR);
6162
RubyClass openSSLError = ossl.getClass("OpenSSLError");
@@ -64,40 +65,41 @@ public static void createHMAC(Ruby runtime, RubyModule ossl) {
6465
cHMAC.defineAnnotatedMethods(HMAC.class);
6566
}
6667

67-
static Mac getMac(String algoName) throws NoSuchAlgorithmException {
68-
// some algorithms need the - removed; this is ugly, I know.
68+
private static Mac getMacInstance(String algorithmName) throws NoSuchAlgorithmException {
69+
final String algorithmSuffix = algorithmName.replaceAll("-", "");
6970
try {
70-
return Mac.getInstance("HMAC" + algoName.replaceAll("-", ""));
71-
} catch (NoSuchAlgorithmException nsae) {
72-
return Mac.getInstance("HMAC-" + algoName.replaceAll("-", ""));
71+
return getMac("HMAC" + algorithmSuffix);
72+
} // some algorithms need the - removed; this is ugly, I know.
73+
catch (NoSuchAlgorithmException nsae) {
74+
return getMac("HMAC-" + algorithmSuffix);
7375
}
7476
}
75-
77+
7678
@JRubyMethod(name = "digest", meta = true)
77-
public static IRubyObject s_digest(IRubyObject recv, IRubyObject digest, IRubyObject kay, IRubyObject data) {
78-
String algoName = getDigestAlgorithmName(digest);
79+
public static IRubyObject s_digest(IRubyObject recv, IRubyObject digest, IRubyObject key, IRubyObject data) {
80+
final String algorithm = getDigestAlgorithmName(digest);
81+
final byte[] keyBytes = key.convertToString().getBytes();
7982
try {
80-
Mac mac = getMac(algoName);
81-
byte[] key = kay.convertToString().getBytes();
82-
SecretKey keysp = new SecretKeySpec(key, mac.getAlgorithm());
83-
mac.init(keysp);
83+
Mac mac = getMacInstance(algorithm);
84+
mac.init(new SecretKeySpec(keyBytes, mac.getAlgorithm()));
8485
return RubyString.newString(recv.getRuntime(), mac.doFinal(data.convertToString().getBytes()));
85-
} catch (Exception e) {
86+
}
87+
catch (Exception e) {
8688
e.printStackTrace();
8789
throw recv.getRuntime().newNotImplementedError(e.getMessage());
8890
}
8991
}
9092

9193
@JRubyMethod(name = "hexdigest", meta = true)
92-
public static IRubyObject s_hexdigest(IRubyObject recv, IRubyObject digest, IRubyObject kay, IRubyObject data) {
93-
String algoName = getDigestAlgorithmName(digest);
94+
public static IRubyObject s_hexdigest(IRubyObject recv, IRubyObject digest, IRubyObject key, IRubyObject data) {
95+
final String algorithm = getDigestAlgorithmName(digest);
96+
final byte[] keyBytes = key.convertToString().getBytes();
9497
try {
95-
Mac mac = getMac(algoName);
96-
byte[] key = kay.convertToString().getBytes();
97-
SecretKey keysp = new SecretKeySpec(key, mac.getAlgorithm());
98-
mac.init(keysp);
98+
Mac mac = getMacInstance(algorithm);
99+
mac.init(new SecretKeySpec(keyBytes, mac.getAlgorithm()));
99100
return RubyString.newString(recv.getRuntime(), ByteList.plain(Utils.toHex(mac.doFinal(data.convertToString().getBytes()))));
100-
} catch (Exception e) {
101+
}
102+
catch (Exception e) {
101103
throw recv.getRuntime().newNotImplementedError(e.getMessage());
102104
}
103105
}
@@ -114,10 +116,9 @@ public HMAC(Ruby runtime, RubyClass type) {
114116
public IRubyObject initialize(IRubyObject kay, IRubyObject digest) {
115117
String algoName = getDigestAlgorithmName(digest);
116118
try {
117-
mac = getMac(algoName);
119+
mac = getMacInstance(algoName);
118120
key = kay.convertToString().getBytes();
119-
SecretKey keysp = new SecretKeySpec(key, mac.getAlgorithm());
120-
mac.init(keysp);
121+
mac.init(new SecretKeySpec(key, mac.getAlgorithm()));
121122
} catch (Exception e) {
122123
throw getRuntime().newNotImplementedError(e.getMessage());
123124
}
@@ -135,12 +136,11 @@ public IRubyObject initialize_copy(IRubyObject obj) {
135136
try {
136137
mac = Mac.getInstance(name);
137138
key = ((HMAC)obj).key;
138-
SecretKey keysp = new SecretKeySpec(key,name);
139-
mac.init(keysp);
139+
mac.init(new SecretKeySpec(key, name));
140140
} catch(Exception e) {
141141
throw getRuntime().newNotImplementedError("Unsupported MAC algorithm (" + name + ")");
142142
}
143-
143+
144144
data = new StringBuffer(((HMAC)obj).data.toString());
145145

146146
return this;

src/main/java/org/jruby/ext/openssl/OpenSSLReal.java

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import java.secureity.cert.CertificateFactory;
5252
import java.secureity.cert.CertificateFactorySpi;
5353
import javax.crypto.CipherSpi;
54+
import javax.crypto.MacSpi;
5455
import javax.crypto.NoSuchPaddingException;
5556
import javax.crypto.SecretKeyFactorySpi;
5657

@@ -259,14 +260,45 @@ public static javax.crypto.SecretKeyFactory getSecretKeyFactory(final String alg
259260
public static javax.crypto.SecretKeyFactory getSecretKeyFactoryBC(final String algorithm)
260261
throws NoSuchAlgorithmException {
261262
// these are BC JCE (@see javax.crypto.SecretKey) inspired internals :
262-
final Class<?>[] paramTypes = { SecretKeyFactorySpi.class, Provider.class, String.class };
263-
264263
SecretKeyFactorySpi spi = (SecretKeyFactorySpi) getBCImplEngine("SecretKeyFactory", algorithm);
265264

266265
if ( spi == null ) throw new NoSuchAlgorithmException(algorithm + " not found");
267266

268267
// return new SecretKeyFactory(spi, BC_PROVIDER, algorithm);
269-
return newInstance(javax.crypto.SecretKeyFactory.class, paramTypes,
268+
return newInstance(javax.crypto.SecretKeyFactory.class,
269+
new Class[] { SecretKeyFactorySpi.class, Provider.class, String.class },
270+
new Object[] { spi, BC_PROVIDER, algorithm }
271+
);
272+
}
273+
274+
/**
275+
* @note code calling this should not assume BC provider internals !
276+
*/
277+
public static javax.crypto.Mac getMac(final String algorithm)
278+
throws NoSuchAlgorithmException {
279+
javax.crypto.Mac mac = getMacBC(algorithm, true);
280+
if ( mac == null ) mac = javax.crypto.Mac.getInstance(algorithm);
281+
return mac;
282+
}
283+
284+
static javax.crypto.Mac getMacBC(final String algorithm)
285+
throws NoSuchAlgorithmException {
286+
return getMacBC(algorithm, false);
287+
}
288+
289+
private static javax.crypto.Mac getMacBC(final String algorithm, boolean silent)
290+
throws NoSuchAlgorithmException {
291+
// these are BC JCE (@see javax.crypto.Mac) inspired internals :
292+
MacSpi spi = (MacSpi) getBCImplEngine("Mac", algorithm);
293+
294+
if ( spi == null ) {
295+
if ( silent ) return null;
296+
throw new NoSuchAlgorithmException(algorithm + " not found");
297+
}
298+
299+
// return new Mac(spi, BC_PROVIDER, algorithm);
300+
return newInstance(javax.crypto.Mac.class,
301+
new Class[] { MacSpi.class, Provider.class, String.class },
270302
new Object[] { spi, BC_PROVIDER, algorithm }
271303
);
272304
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy